/ Hex Artifact Content
Login

Artifact 603953faca895386d4f3a8b7046f3e4e6c071c53:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57  E 1.#endif../* W
0ee0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 47  hat version of G
0ef0: 43 43 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  CC is being used
0f00: 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43 20 69  .  0 means GCC i
0f10: 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65 64  s not being used
0f20: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55   */.#ifdef __GNU
0f30: 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47 43 43  C__.# define GCC
0f40: 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55 43  _VERSION (__GNUC
0f50: 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e 55  __*1000000+__GNU
0f60: 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b 5f  C_MINOR__*1000+_
0f70: 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45 4c  _GNUC_PATCHLEVEL
0f80: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
0f90: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 30  ne GCC_VERSION 0
0fa0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64  .#endif../* Need
0fb0: 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64  ed for various d
0fc0: 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f  efinitions... */
0fd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47  .#if defined(__G
0fe0: 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  NUC__) && !defin
0ff0: 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a  ed(_GNU_SOURCE).
1000: 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f  # define _GNU_SO
1010: 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66  URCE.#endif..#if
1020: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
1030: 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  SD__) && !define
1040: 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23  d(_BSD_SOURCE).#
1050: 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55   define _BSD_SOU
1060: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  RCE.#endif../*.*
1070: 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65  * For MinGW, che
1080: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
1090: 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20  can include the 
10a0: 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74  header file cont
10b0: 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65  aining its.** ve
10c0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
10d0: 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74  n, among other t
10e0: 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79  hings.  Normally
10f0: 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20  , this internal 
1100: 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20  MinGW.** header 
1110: 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79  file would [only
1120: 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75  ] be included au
1130: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f  tomatically by o
1140: 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65  ther MinGW heade
1150: 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65  r.** files; howe
1160: 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e  ver, the contain
1170: 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ed version infor
1180: 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65  mation is now re
1190: 71 75 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a  quired by this.*
11a0: 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f  * header file to
11b0: 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e   work around bin
11c0: 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ary compatibilit
11d0: 79 20 69 73 73 75 65 73 20 28 73 65 65 20 62 65  y issues (see be
11e0: 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73  low) and.** this
11f0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f   is the only kno
1200: 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62  wn way to reliab
1210: 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54  ly obtain it.  T
1220: 68 69 73 20 65 6e 74 69 72 65 20 23 69 66 20 62  his entire #if b
1230: 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65  lock.** would be
1240: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65   completely unne
1250: 63 65 73 73 61 72 79 20 69 66 20 74 68 65 72 65  cessary if there
1260: 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77   was any other w
1270: 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a  ay of detecting.
1280: 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65  ** MinGW via the
1290: 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20  ir preprocessor 
12a0: 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75  (e.g. if they cu
12b0: 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47  stomized their G
12c0: 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20  CC to define.** 
12d0: 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69  some MinGW-speci
12e0: 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68  fic macros).  Wh
12f0: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  en compiling for
1300: 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74   MinGW, either t
1310: 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47  he.** _HAVE_MING
1320: 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49  W_H or _HAVE__MI
1330: 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20  NGW_H (note the 
1340: 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65  extra underscore
1350: 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a  ) macro must be.
1360: 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65  ** defined; othe
1370: 72 77 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e  rwise, detection
1380: 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73   of conditions s
1390: 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57  pecific to MinGW
13a0: 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61   will be.** disa
13b0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  bled..*/.#if def
13c0: 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57  ined(_HAVE_MINGW
13d0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d  _H).# include "m
13e0: 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65  ingw.h".#elif de
13f0: 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e  fined(_HAVE__MIN
1400: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1410: 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69  "_mingw.h".#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
1430: 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28  GW version 4.x (
1440: 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63 68 65  and higher), che
1450: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
1460: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
1470: 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20  _T.** define is 
1480: 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e  required to main
1490: 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70  tain binary comp
14a0: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 74  atibility with t
14b0: 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a  he MSVC runtime.
14c0: 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73  ** library in us
14d0: 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64  e (e.g. for Wind
14e0: 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20  ows XP)..*/.#if 
14f0: 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32  !defined(_USE_32
1500: 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21  BIT_TIME_T) && !
1510: 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42  defined(_USE_64B
1520: 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a  IT_TIME_T) && \.
1530: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e      defined(_WIN
1540: 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  32) && !defined(
1550: 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20  _WIN64) && \.   
1560: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57   defined(__MINGW
1570: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20  _MAJOR_VERSION) 
1580: 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52  && __MINGW_MAJOR
1590: 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26  _VERSION >= 4 &&
15a0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
15b0: 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66  _MSVCRT__).# def
15c0: 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54  ine _USE_32BIT_T
15d0: 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IME_T.#endif../*
15e0: 20 54 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69   The public SQLi
15f0: 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54  te interface.  T
1600: 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  he _FILE_OFFSET_
1610: 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  BITS macro must 
1620: 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20  appear.** first 
1630: 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74  in QNX.  Also, t
1640: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1650: 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20  ME_T macro must 
1660: 61 70 70 65 61 72 20 66 69 72 73 74 20 66 6f 72  appear first for
1670: 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69  .** MinGW..*/.#i
1680: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e  nclude "sqlite3.
1690: 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  h"../*.** Includ
16a0: 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  e the configurat
16b0: 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75  ion header outpu
16c0: 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27  t by 'configure'
16d0: 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67 20   if we're using 
16e0: 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d  the.** autoconf-
16f0: 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23  based build.*/.#
1700: 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49  ifdef _HAVE_SQLI
1710: 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63  TE_CONFIG_H.#inc
1720: 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a  lude "config.h".
1730: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
1740: 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22   "sqliteLimit.h"
1750: 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69  ../* Disable nui
1760: 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f  sance warnings o
1770: 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c  n Borland compil
1780: 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ers */.#if defin
1790: 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29  ed(__BORLANDC__)
17a0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72  .#pragma warn -r
17b0: 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c  ch /* unreachabl
17c0: 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d  e code */.#pragm
17d0: 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43  a warn -ccc /* C
17e0: 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61  ondition is alwa
17f0: 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ys true or false
1800: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1810: 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65   -aus /* Assigne
1820: 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72  d value is never
1830: 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61   used */.#pragma
1840: 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f   warn -csu /* Co
1850: 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61  mparing signed a
1860: 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23  nd unsigned */.#
1870: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61  pragma warn -spa
1880: 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70   /* Suspicious p
1890: 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69  ointer arithmeti
18a0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
18b0: 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64  ** Include stand
18c0: 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65 73  ard header files
18d0: 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f   as necessary.*/
18e0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54 44  .#ifdef HAVE_STD
18f0: 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  INT_H.#include <
1900: 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66  stdint.h>.#endif
1910: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  .#ifdef HAVE_INT
1920: 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65  TYPES_H.#include
1930: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65   <inttypes.h>.#e
1940: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1950: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1960: 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61 73   are used to cas
1970: 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  t pointers to in
1980: 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e  tegers and.** in
1990: 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65  tegers to pointe
19a0: 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75  rs.  The way you
19b0: 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73 20   do this varies 
19c0: 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65  from one compile
19d0: 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74  r.** to the next
19e0: 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65 76  , so we have dev
19f0: 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f  eloped the follo
1a00: 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20  wing set of #if 
1a10: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f  statements.** to
1a20: 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70   generate approp
1a30: 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72  riate macros for
1a40: 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66   a wide range of
1a50: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a   compilers..**.*
1a60: 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22 41  * The correct "A
1a70: 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74  NSI" way to do t
1a80: 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74 68  his is to use th
1a90: 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e  e intptr_t type.
1aa0: 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  .** Unfortunatel
1ab0: 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20  y, that typedef 
1ac0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
1ad0: 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72   on all compiler
1ae0: 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69  s, or.** if it i
1af0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20  s available, it 
1b00: 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63  requires an #inc
1b10: 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63  lude of specific
1b20: 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74   headers.** that
1b30: 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d   vary from one m
1b40: 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65  achine to the ne
1b50: 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  xt..**.** Ticket
1b60: 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76   #3860:  The llv
1b70: 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c  m-gcc-4.2 compil
1b80: 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68  er from Apple ch
1b90: 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28  okes on.** the (
1ba0: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1bb0: 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74  0)[X]) construct
1bc0: 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b  .  But MSVC chok
1bd0: 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58  es on ((void*)(X
1be0: 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76  ))..** So we hav
1bf0: 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20  e to define the 
1c00: 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72  macros in differ
1c10: 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69  ent ways dependi
1c20: 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d  ng on the.** com
1c30: 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65  piler..*/.#if de
1c40: 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f  fined(__PTRDIFF_
1c50: 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73  TYPE__)  /* This
1c60: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72   case should wor
1c70: 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64  k for GCC */.# d
1c80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1c90: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1ca0: 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  id*)(__PTRDIFF_T
1cb0: 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66  YPE__)(X)).# def
1cc0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1cd0: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1ce0: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
1cf0: 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65  _)(X)).#elif !de
1d00: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1d10: 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66        /* Works f
1d20: 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68  or compilers oth
1d30: 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a  er than LLVM */.
1d40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1d50: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1d60: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1d70: 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20  0)[X]).# define 
1d80: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1d90: 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63  T(X)  ((int)(((c
1da0: 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30  har*)X)-(char*)0
1db0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1dc0: 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20  (HAVE_STDINT_H) 
1dd0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61    /* Use this ca
1de0: 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e  se if we have AN
1df0: 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20  SI headers */.# 
1e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1e10: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1e20: 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28  oid*)(intptr_t)(
1e30: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
1e40: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
1e50: 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72  )  ((int)(intptr
1e60: 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20  _t)(X)).#else   
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61         /* Genera
1e90: 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20  tes a warning - 
1ea0: 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f  but it always wo
1eb0: 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  rks */.# define 
1ec0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1ed0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58  R(X)  ((void*)(X
1ee0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
1ef0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1f00: 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e    ((int)(X)).#en
1f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  dif../*.** A mac
1f20: 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68  ro to hint to th
1f30: 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20  e compiler that 
1f40: 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  a function shoul
1f50: 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69  d not be.** inli
1f60: 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ned..*/.#if defi
1f70: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20  ned(__GNUC__).# 
1f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1f90: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69  OINLINE  __attri
1fa0: 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65  bute__((noinline
1fb0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1fc0: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d  (_MSC_VER) && _M
1fd0: 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20  SC_VER>=1310.#  
1fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1ff0: 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70  INLINE  __declsp
2000: 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c  ec(noinline).#el
2010: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  se.#  define SQL
2020: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e  ITE_NOINLINE.#en
2030: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  dif../*.** Make 
2040: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 6f  sure that the co
2050: 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69 63  mpiler intrinsic
2060: 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65 20  s we desire are 
2070: 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20  enabled when.** 
2080: 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20 61  compiling with a
2090: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 65  n appropriate ve
20a0: 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e  rsion of MSVC un
20b0: 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20 62  less prevented b
20c0: 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  y.** the SQLITE_
20d0: 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49  DISABLE_INTRINSI
20e0: 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66  C define..*/.#if
20f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2100: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2110: 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e 65  IC).#  if define
2120: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2130: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
2140: 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f     if !defined(_
2150: 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20 20  WIN32_WCE).#    
2160: 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69    include <intri
2170: 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61 67  n.h>.#      prag
2180: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
2190: 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a 23  teswap_ushort).#
21a0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
21b0: 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70  rinsic(_byteswap
21c0: 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20 70  _ulong).#      p
21d0: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
21e0: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
21f0: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2200: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2210: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2220: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2230: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2240: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
2250: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
2260: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
2270: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
2280: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
2290: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
22a0: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
22b0: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
22c0: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
22d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
22e0: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
22f0: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2300: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2310: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2320: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2330: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
2340: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
2350: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
2360: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
2370: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
2380: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
2390: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
23a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
23b0: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
23c0: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
23d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
23e0: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
23f0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2400: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2410: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2420: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2430: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
2440: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
2450: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
2460: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2470: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
2480: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
2490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
24a0: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
24b0: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
24c0: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
24d0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
24e0: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
24f0: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2500: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2510: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2520: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2530: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
2540: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
2550: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
2560: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
2570: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
2580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
2590: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
25a0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
25b0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
25c0: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
25d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
25e0: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
25f0: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2600: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2610: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2620: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2630: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
2640: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
2650: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2660: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
2670: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
2680: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
2690: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
26a0: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
26b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
26c0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
26d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
26e0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
26f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2700: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2710: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2720: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2730: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2740: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2750: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2760: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2770: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2780: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2790: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
27a0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
27b0: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
27c0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
27d0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
27e0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
27f0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2800: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2810: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2820: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2830: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2840: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2850: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2860: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2870: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2880: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2890: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
28a0: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
28b0: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
28c0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
28d0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
28e0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
28f0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2900: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2910: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2920: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2930: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2940: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2950: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2960: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2970: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2980: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2990: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
29a0: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
29b0: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
29c0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
29d0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
29e0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29f0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2a00: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2a10: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2a20: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2a30: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2a40: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2a50: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2a60: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2a70: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2a80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2a90: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2aa0: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2ab0: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2ac0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2ad0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2ae0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2af0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2b00: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2b10: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2b20: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2b30: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2b40: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2b50: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2b60: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2b70: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2b80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2b90: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2ba0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2bb0: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2bc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2bd0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2be0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2bf0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2c00: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2c10: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2c20: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2c30: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2c40: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2c50: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2c60: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2c70: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2c80: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2c90: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2ca0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2cb0: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
2cc0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
2cd0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
2ce0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
2cf0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2d00: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
2d10: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2d20: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2d30: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2d40: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2d50: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2d60: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2d70: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2d80: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2d90: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2da0: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2db0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
2dc0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
2dd0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
2de0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
2df0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
2e00: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
2e10: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2e20: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2e30: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2e40: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2e50: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2e60: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2e70: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2e80: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2e90: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2ea0: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2eb0: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
2ec0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
2ed0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
2ee0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
2ef0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
2f00: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
2f10: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2f20: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2f30: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2f40: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2f50: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2f60: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2f70: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2f80: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2f90: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2fa0: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2fb0: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
2fc0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
2fd0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
2fe0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
2ff0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3000: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3010: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3020: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3030: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
3040: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
3050: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
3060: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
3070: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
3080: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
3090: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
30a0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
30b0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
30c0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
30d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
30e0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
30f0: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3100: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3110: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3130: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
3140: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3150: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
3160: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
3170: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
3180: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
3190: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
31a0: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
31b0: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
31c0: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
31d0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
31e0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
31f0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3200: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3210: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3220: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3230: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3240: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
3250: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
3260: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
3270: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
3280: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
3290: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
32a0: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
32b0: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
32c0: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
32d0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
32e0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
32f0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3300: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3310: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3320: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3330: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
3340: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
3350: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
3360: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
3370: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
3380: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
3390: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
33a0: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
33b0: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
33c0: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
33d0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
33e0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
33f0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3400: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3410: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3420: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3430: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
3440: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
3450: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
3460: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
3470: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
3480: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
3490: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
34a0: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
34b0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
34c0: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
34d0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
34e0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
34f0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3500: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3510: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3520: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3530: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
3540: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
3550: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
3560: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
3570: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
3580: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
3590: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
35a0: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
35b0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
35c0: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
35d0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
35e0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
35f0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3600: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3610: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3620: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3630: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
3640: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
3650: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
3660: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
3670: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
3680: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
3690: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
36a0: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
36b0: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
36c0: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
36d0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
36e0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
36f0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3700: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3710: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3720: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3730: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3740: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3750: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3760: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3770: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3780: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3790: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
37a0: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
37b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
37c0: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
37d0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
37e0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
37f0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3800: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3810: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3820: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3830: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3840: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3850: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3860: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3870: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3880: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3890: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
38a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
38b0: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
38c0: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
38d0: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
38e0: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
38f0: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3900: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3910: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3920: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3930: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3940: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3950: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3960: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3970: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3980: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3990: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
39a0: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
39b0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
39c0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
39d0: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
39e0: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
39f0: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3a00: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3a10: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3a20: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3a30: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3a40: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3a50: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3a60: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a70: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3a80: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3a90: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3aa0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3ab0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3ac0: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3ad0: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3ae0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3af0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3b00: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3b10: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3b20: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3b30: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3b40: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3b50: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3b60: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3b70: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3b80: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3b90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3ba0: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3bb0: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3bc0: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3bd0: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3be0: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3bf0: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3c00: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3c10: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3c20: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3c30: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3c40: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3c50: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3c60: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3c70: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3c80: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3c90: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
3ca0: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
3cb0: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
3cc0: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
3cd0: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
3ce0: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
3cf0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
3d00: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
3d10: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3d20: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
3d30: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
3d40: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
3d50: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
3d60: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3d70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
3d80: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3d90: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
3da0: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
3db0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
3dc0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3dd0: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
3df0: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
3e00: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
3e10: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
3e20: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
3e30: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3e40: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
3e50: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
3e60: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
3e70: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
3e80: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
3e90: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
3ea0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
3eb0: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
3ec0: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
3ed0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
3ee0: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
3ef0: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
3f00: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
3f10: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
3f20: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
3f30: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
3f40: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3f50: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
3f60: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
3f70: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
3f80: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
3f90: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
3fa0: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
3fb0: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
3fc0: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
3fd0: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
3fe0: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
3ff0: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4000: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4010: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4020: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4030: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
4040: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
4050: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
4060: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
4070: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
4080: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
4090: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
40a0: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
40b0: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
40c0: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
40d0: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
40e0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
40f0: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4100: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4110: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4120: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4130: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
4140: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
4150: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
4160: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
4170: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4180: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
4190: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
41a0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
41b0: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
41c0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
41d0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
41e0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
41f0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4200: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4210: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4220: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4230: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
4240: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
4250: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
4260: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
4270: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
4280: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
4290: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
42a0: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
42b0: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
42c0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
42d0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
42e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
42f0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4300: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4310: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4320: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4330: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
4340: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
4350: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
4360: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
4370: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
4380: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
4390: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
43a0: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
43b0: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
43c0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
43d0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
43e0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
43f0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4400: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4410: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4420: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4430: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
4440: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
4450: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
4460: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
4470: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
4480: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
4490: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
44a0: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
44b0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
44c0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
44d0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
44e0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
44f0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
4500: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
4510: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
4520: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
4530: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
4540: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
4550: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4560: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
4570: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
4580: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
4590: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
45a0: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
45b0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
45c0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
45d0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
45e0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
45f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
4600: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
4610: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4620: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
4630: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
4640: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
4650: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
4660: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
4670: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4680: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4690: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
46a0: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
46b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
46c0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
46d0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
46e0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
46f0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
4700: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
4710: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
4720: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
4730: 65 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20  e C compiler.** 
4740: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
4750: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
4760: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
4770: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
4780: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
4790: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
47a0: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
47b0: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
47c0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
47d0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
47e0: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
47f0: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
4800: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
4810: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
4820: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
4830: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
4840: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
4850: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
4860: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
4870: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
4880: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
4890: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
48a0: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
48b0: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
48c0: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
48d0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
48e0: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
48f0: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
4900: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
4910: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
4920: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4930: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
4940: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
4950: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
4960: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
4970: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
4980: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
4990: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
49a0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
49b0: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
49c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
49d0: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
49e0: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
49f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4a00: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
4a10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
4a20: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
4a30: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
4a40: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
4a50: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
4a60: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
4a70: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
4a80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4a90: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
4aa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
4ab0: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
4ac0: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4ad0: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
4ae0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
4af0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
4b00: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
4b10: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
4b20: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
4b30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
4b40: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
4b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
4b60: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
4b70: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
4b80: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
4b90: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
4ba0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4bb0: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
4bc0: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
4bd0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
4be0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4bf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4c00: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4c10: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
4c20: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4c30: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4c40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4c50: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4c70: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4c80: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4c90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
4ca0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4cb0: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
4cc0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
4cd0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
4ce0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4cf0: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
4d00: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4d10: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4d20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4d30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
4d40: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4d50: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
4d60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
4d70: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
4d80: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
4d90: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
4da0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
4db0: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
4dc0: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
4dd0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
4de0: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
4df0: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
4e00: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
4e10: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
4e20: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
4e30: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
4e40: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
4e50: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
4e60: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
4e70: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
4e80: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a  t will hold..*/.
4e90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4ea0: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
4eb0: 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51  ITSZ.# define SQ
4ec0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
4ed0: 43 48 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23  CHE_INITSZ 100.#
4ee0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43  endif../*.** GCC
4ef0: 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
4f00: 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20   the offsetof() 
4f10: 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68  macro so we'll h
4f20: 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20  ave to do it.** 
4f30: 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69  ourselves..*/.#i
4f40: 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23  fndef offsetof.#
4f50: 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28  define offsetof(
4f60: 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29  STRUCTURE,FIELD)
4f70: 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26   ((int)((char*)&
4f80: 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d  ((STRUCTURE*)0)-
4f90: 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a  >FIELD)).#endif.
4fa0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4fb0: 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d   compute minimum
4fc0: 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20   and maximum of 
4fd0: 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a  two numbers..*/.
4fe0: 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65  #ifndef MIN.# de
4ff0: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
5000: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
5010: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d  #endif.#ifndef M
5020: 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28  AX.# define MAX(
5030: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
5040: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  ):(B)).#endif../
5050: 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62  *.** Swap two ob
5060: 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54 59  jects of type TY
5070: 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  PE..*/.#define S
5080: 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54  WAP(TYPE,A,B) {T
5090: 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d  YPE t=A; A=B; B=
50a0: 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  t;}../*.** Check
50b0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
50c0: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
50d0: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
50e0: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
50f0: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
5100: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
5110: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
5120: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
5130: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
5150: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
5160: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
5170: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
5180: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
5190: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
51a0: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
51b0: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
51c0: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
51d0: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
51e0: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
51f0: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
5200: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
5210: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
5220: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
5230: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
5240: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
5250: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
5260: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
5270: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
5280: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
5290: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
52a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
52b0: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
52c0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
52d0: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
52e0: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
52f0: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
5300: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5310: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
5320: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5330: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
5340: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
5350: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
5360: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
5370: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
5380: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
5390: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
53a0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
53b0: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
53c0: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
53d0: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
53e0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
53f0: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
5400: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5410: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
5420: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5430: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
5440: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
5450: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
5460: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
5470: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
5480: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5490: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
54a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
54b0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
54c0: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
54d0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
54e0: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
54f0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5500: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
5510: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
5520: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
5530: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
5540: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
5550: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
5560: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
5570: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5580: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5590: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
55a0: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
55b0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
55c0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
55d0: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
55e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
55f0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
5600: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5610: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
5620: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
5630: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
5640: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5650: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
5660: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
5670: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
5680: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5690: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56b0: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
56c0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
56d0: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
56f0: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
5700: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
5710: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5720: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
5730: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
5740: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
5750: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
5760: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
5770: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
5780: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
5790: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
57a0: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
57b0: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
57c0: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
57d0: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
57e0: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
57f0: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
5800: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
5810: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
5820: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
5830: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
5840: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
5850: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
5860: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
5870: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
5880: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
5890: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
58a0: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
58b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
58c0: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
58d0: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
58e0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
58f0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
5900: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
5910: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
5920: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
5930: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
5940: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5950: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
5960: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
5970: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
5980: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
5990: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
59a0: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
59b0: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
59c0: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
59d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
59e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
59f0: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
5a00: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
5a10: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
5a20: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
5a30: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
5a40: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
5a50: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
5a60: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
5a70: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
5a80: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
5a90: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
5aa0: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
5ab0: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
5ac0: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
5ad0: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
5ae0: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
5af0: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
5b00: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
5b10: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
5b20: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
5b30: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
5b40: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
5b50: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
5b60: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
5b70: 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20 73  quantities are s
5b80: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
5b90: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
5ba0: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
5bb0: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
5bc0: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
5bd0: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
5be0: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
5bf0: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
5c00: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
5c10: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
5c20: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
5c30: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
5c40: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
5c50: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
5c60: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
5c70: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
5c80: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
5c90: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
5ca0: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
5cb0: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
5cc0: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
5cd0: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
5ce0: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
5cf0: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
5d00: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
5d10: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
5d20: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
5d30: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
5d40: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
5d50: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
5d60: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
5d70: 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78  al values..** Ex
5d80: 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  amples:.**.**   
5d90: 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20   0.5 -> -10     
5da0: 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33        0.1 -> -33
5db0: 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d          0.0625 -
5dc0: 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66  > -40.*/.typedef
5dd0: 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45   INT16_TYPE LogE
5de0: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  st;../*.** Set t
5df0: 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  he SQLITE_PTRSIZ
5e00: 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e  E macro to the n
5e10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
5e20: 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23  n a pointer.*/.#
5e30: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54  ifndef SQLITE_PT
5e40: 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e  RSIZE.# if defin
5e50: 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ed(__SIZEOF_POIN
5e60: 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  TER__).#   defin
5e70: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5e80: 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45   __SIZEOF_POINTE
5e90: 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e  R__.# elif defin
5ea0: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
5eb0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
5ec0: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
5ed0: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
5ee0: 20 20 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f         defined(_
5ef0: 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69  M_ARM)   || defi
5f00: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20  ned(__arm__)    
5f10: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5f20: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5f30: 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20  ITE_PTRSIZE 4.# 
5f40: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5f50: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38  SQLITE_PTRSIZE 8
5f60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f70: 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79 70  ./* The uptr typ
5f80: 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  e is an unsigned
5f90: 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65   integer large e
5fa0: 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20  nough to hold a 
5fb0: 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64  pointer.*/.#if d
5fc0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
5fd0: 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20  NT_H).  typedef 
5fe0: 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a  uintptr_t uptr;.
5ff0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52  #elif SQLITE_PTR
6000: 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65  SIZE==4.  typede
6010: 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73  f u32 uptr;.#els
6020: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
6030: 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  uptr;.#endif../*
6040: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57  .** The SQLITE_W
6050: 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63  ITHIN(P,S,E) mac
6060: 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ro checks to see
6070: 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f   if pointer P po
6080: 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74  ints to.** somet
6090: 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28  hing between S (
60a0: 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45  inclusive) and E
60b0: 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a   (exclusive)..**
60c0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
60d0: 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66 65  ds, S is a buffe
60e0: 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69  r and E is a poi
60f0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
6100: 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20  t byte after.** 
6110: 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65  the end of buffe
6120: 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  r S.  This macro
6130: 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
6140: 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d   P points to som
6150: 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69  ething.** contai
6160: 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  ned within the b
6170: 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66  uffer S..*/.#def
6180: 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49  ine SQLITE_WITHI
6190: 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72  N(P,S,E) (((uptr
61a0: 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29  )(P)>=(uptr)(S))
61b0: 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75 70  &&((uptr)(P)<(up
61c0: 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a  tr)(E))).../*.**
61d0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
61e0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
61f0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
6200: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
6210: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
6220: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
6230: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
6240: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
6250: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
6260: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
6270: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
6280: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
6290: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
62a0: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
62b0: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
62c0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
62d0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
62e0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
62f0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
6300: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
6310: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
6320: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
6330: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28  n-time..*/.#if (
6340: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
6350: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
6360: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
6370: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
6380: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6390: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
63a0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
63b0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  _) || defined(_M
63c0: 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20  _X64)  ||    \. 
63d0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
63e0: 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  MD64) || defined
63f0: 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20  (_M_ARM)     || 
6400: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20  defined(__x86)  
6410: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6420: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20  fined(__arm__)) 
6430: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
6440: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
6450: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
6460: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6470: 20 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65     1234.# define
6480: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
6490: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
64a0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
64b0: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
64c0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
64d0: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
64e0: 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65  E.#endif.#if (de
64f0: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6500: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6510: 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21  __))  \.    && !
6520: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
6530: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
6540: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
6550: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6560: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6570: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6580: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
6590: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
65a0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
65b0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
65c0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
65d0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
65e0: 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  d(SQLITE_BYTEORD
65f0: 45 52 29 0a 23 20 69 66 64 65 66 20 53 51 4c 49  ER).# ifdef SQLI
6600: 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
6610: 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69    const int sqli
6620: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c  te3one = 1;.# el
6630: 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73  se.  extern cons
6640: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6650: 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ;.# endif.# defi
6660: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6670: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
6680: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
6690: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
66a0: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
66b0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
66c0: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
66d0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
66e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
66f0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
6700: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6710: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
6720: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6730: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
6740: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
6750: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
6760: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
6770: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
6780: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
6790: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
67a0: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
67b0: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
67c0: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
67d0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
67e0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
67f0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
6800: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
6810: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
6820: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
6830: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
6840: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
6850: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
6860: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
6870: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
6880: 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  64)../*.** Round
6890: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
68a0: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
68b0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
68c0: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
68d0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
68e0: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
68f0: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
6900: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
6910: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
6920: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
6930: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
6940: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
6950: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
6960: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
6970: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
6980: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
6990: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
69a0: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
69b0: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
69c0: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
69d0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
69e0: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
69f0: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
6a00: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
6a10: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
6a20: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
6a30: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
6a40: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6a50: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
6a60: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
6a70: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
6a80: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
6a90: 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ation might retu
6aa0: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
6ab0: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
6ac0: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
6ad0: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
6ae0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
6af0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6b00: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
6b10: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
6b20: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
6b30: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
6b40: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
6b50: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
6b60: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
6b70: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
6b80: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
6b90: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
6ba0: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  =0).#endif../*.*
6bb0: 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f  * Disable MMAP o
6bc0: 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72  n platforms wher
6bd0: 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  e it is known to
6be0: 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66   not work.*/.#if
6bf0: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
6c00: 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  SD__) || defined
6c10: 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75  (__QNXNTO__).# u
6c20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
6c30: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
6c40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
6c50: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
6c60: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
6c70: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  maximum size of 
6c80: 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d  memory used by m
6c90: 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f  emory-mapped I/O
6ca0: 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23   in the VFS.*/.#
6cb0: 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a  ifdef __APPLE__.
6cc0: 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65  # include <Targe
6cd0: 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e  tConditionals.h>
6ce0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6cf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6d00: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
6d10: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
6d20: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
6d30: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
6d40: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
6d50: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
6d60: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
6d70: 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c  ned(__sun) \.  |
6d80: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65  | defined(__Free
6d90: 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  BSD__) \.  || de
6da0: 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c  fined(__DragonFl
6db0: 79 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  y__).#   define 
6dc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6dd0: 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20  SIZE 0x7fff0000 
6de0: 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a   /* 2147418112 *
6df0: 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  /.# else.#   def
6e00: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
6e10: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64  MAP_SIZE 0.# end
6e20: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6e30: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6e40: 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65  _xc 1 /* exclude
6e50: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
6e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6e70: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
6e80: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
6e90: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
6ea0: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
6eb0: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
6ec0: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
6ed0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
6ee0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
6ef0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
6f00: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
6f10: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
6f20: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
6f30: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6f40: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
6f50: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6f60: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65  MMAP_SIZE 0.# de
6f70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
6f80: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  ULT_MMAP_SIZE_xc
6f90: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
6fa0: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
6fb0: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
6fc0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6fd0: 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE>SQLITE_MAX_MM
6fe0: 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20  AP_SIZE.# undef 
6ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7000: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
7010: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
7020: 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54  _MMAP_SIZE SQLIT
7030: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7040: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  #endif../*.** On
7050: 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ly one of SQLITE
7060: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72  _ENABLE_STAT3 or
7070: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7080: 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69  TAT4 can be defi
7090: 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79  ned..** Priority
70a0: 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c   is given to SQL
70b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
70c0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65  .  If either are
70d0: 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a   defined, also.*
70e0: 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  * define SQLITE_
70f0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7100: 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20  STAT4.*/.#ifdef 
7110: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7120: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
7130: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
7140: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7150: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7160: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
7170: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7180: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7190: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
71a0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
71b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
71c0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75  AT3_OR_STAT4.# u
71d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
71e0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
71f0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
7200: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7210: 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68  LED will be eith
7220: 65 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64  er 1 or 0 depend
7230: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
7240: 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c  r not.** the Sel
7250: 65 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61  ect query genera
7260: 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69  tor tracing logi
7270: 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  c is turned on..
7280: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
7290: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
72a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
72b0: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
72c0: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
72d0: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
72e0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
72f0: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7300: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7310: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7320: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7330: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7340: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7350: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7360: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7370: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7380: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7390: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
73a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
73b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
73c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
73d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
73e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
73f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7400: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7410: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7420: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7430: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7440: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7450: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7460: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7470: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7480: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7490: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
74a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
74b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
74c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
74d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
74e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
74f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
7500: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
7510: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
7520: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7530: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
7540: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7550: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
7560: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
7570: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
7580: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
7590: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
75a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
75b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
75c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
75d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
75e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
75f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
7600: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
7610: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
7620: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
7630: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
7640: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
7650: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
7660: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
7670: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
7680: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
7690: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
76a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
76b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
76c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
76d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
76e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
76f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
7700: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7710: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
7720: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
7730: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
7740: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
7750: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
7760: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
7770: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
7780: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
7790: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
77a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
77b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
77c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
77d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
77e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
77f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
7800: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
7810: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
7820: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
7830: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
7840: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
7850: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
7860: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
7870: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
7880: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
7890: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
78a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
78b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
78c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
78d0: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
78e0: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
78f0: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
7900: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
7910: 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68   introduce.** th
7920: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
7930: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
7940: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
7950: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a  ferently.  Any.*
7960: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
7970: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
7980: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
7990: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
79a0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
79b0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
79c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
79d0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
79e0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
79f0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
7a00: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
7a10: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
7a20: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
7a30: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
7a40: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
7a50: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
7a60: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
7a70: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
7a80: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
7a90: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
7aa0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
7ab0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
7ac0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
7ad0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
7ae0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
7af0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
7b00: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
7b10: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
7b20: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
7b30: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
7b40: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
7b50: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
7b60: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
7b70: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7b80: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7b90: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7ba0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7bb0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7bc0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7bd0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7be0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7bf0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7c00: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7c10: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
7c20: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
7c30: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
7c40: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
7c50: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
7c60: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
7c70: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7c80: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7c90: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7ca0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7cb0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7cc0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7cd0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7ce0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7cf0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7d10: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
7d20: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7d30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
7d40: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
7d50: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
7d60: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
7d70: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7d80: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7d90: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7da0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7db0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7dc0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7dd0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7de0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7df0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7e00: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7e10: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
7e20: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
7e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
7e40: 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  WSD.  #define GL
7e50: 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64  OBAL(t,v) v.  #d
7e60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
7e70: 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  balConfig sqlite
7e80: 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a  3Config.#endif..
7e90: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7ea0: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
7eb0: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
7ec0: 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
7ed0: 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65  s and to.** make
7ee0: 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d   it clear to hum
7ef0: 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20  an readers when 
7f00: 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d  a function param
7f10: 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61  eter is delibera
7f20: 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  tely.** left unu
7f30: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
7f40: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
7f50: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
7f60: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
7f70: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
7f80: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
7f90: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
7fa0: 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20   example the.** 
7fb0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
7fc0: 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61  f an SQL aggrega
7fd0: 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b  te step callback
7fe0: 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65   may not use the
7ff0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e  .** parameter in
8000: 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d  dicating the num
8010: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8020: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 61   passed to the a
8030: 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20  ggregate,.** if 
8040: 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68  it knows that th
8050: 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65  is is enforced e
8060: 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20  lsewhere..**.** 
8070: 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  When a function 
8080: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
8090: 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74   used at all wit
80a0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
80b0: 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69  a function,.** i
80c0: 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e  t is generally n
80d0: 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f  amed "NotUsed" o
80e0: 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20  r "NotUsed2" to 
80f0: 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e  make things even
8100: 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77   clearer..** How
8110: 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72  ever, these macr
8120: 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75  os may also be u
8130: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
8140: 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64  warnings related
8150: 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   to.** parameter
8160: 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61  s that may or ma
8170: 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65  y not be used de
8180: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69  pending on compi
8190: 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a  lation options..
81a0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  ** For example t
81b0: 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73 20  hose parameters 
81c0: 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73  only used in ass
81d0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
81e0: 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61  . In these.** ca
81f0: 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ses the paramete
8200: 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20  rs are named as 
8210: 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f  per the usual co
8220: 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  nventions..*/.#d
8230: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8240: 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64 29  AMETER(x) (void)
8250: 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  (x).#define UNUS
8260: 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c  ED_PARAMETER2(x,
8270: 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  y) UNUSED_PARAME
8280: 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41  TER(x),UNUSED_PA
8290: 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a  RAMETER(y)../*.*
82a0: 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
82b0: 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72  nces to structur
82c0: 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  es.*/.typedef st
82d0: 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67  ruct AggInfo Agg
82e0: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
82f0: 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
8300: 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79   AuthContext;.ty
8310: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
8320: 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63  oincInfo Autoinc
8330: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8340: 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74 76  ruct Bitvec Bitv
8350: 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ec;.typedef stru
8360: 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53  ct CollSeq CollS
8370: 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  eq;.typedef stru
8380: 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e  ct Column Column
8390: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
83a0: 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20   Db Db;.typedef 
83b0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53 63  struct Schema Sc
83c0: 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74  hema;.typedef st
83d0: 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a  ruct Expr Expr;.
83e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
83f0: 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74  xprList ExprList
8400: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8410: 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53 70   ExprSpan ExprSp
8420: 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  an;.typedef stru
8430: 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79  ct FKey FKey;.ty
8440: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8450: 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63  cDestructor Func
8460: 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65  Destructor;.type
8470: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8480: 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65  ef FuncDef;.type
8490: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
84a0: 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61  efHash FuncDefHa
84b0: 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  sh;.typedef stru
84c0: 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74  ct IdList IdList
84d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
84e0: 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79   Index Index;.ty
84f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
8500: 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61  exSample IndexSa
8510: 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  mple;.typedef st
8520: 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65  ruct KeyClass Ke
8530: 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20  yClass;.typedef 
8540: 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b  struct KeyInfo K
8550: 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  eyInfo;.typedef 
8560: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8570: 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65   Lookaside;.type
8580: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8590: 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69  sideSlot Lookasi
85a0: 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20  deSlot;.typedef 
85b0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f  struct Module Mo
85c0: 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  dule;.typedef st
85d0: 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
85e0: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79   NameContext;.ty
85f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72  pedef struct Par
8600: 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65  se Parse;.typede
8610: 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61  f struct PreUpda
8620: 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79  te PreUpdate;.ty
8630: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
8640: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
8650: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
8660: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8670: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8680: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8690: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
86a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
86b0: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
86c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
86d0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
86e0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
86f0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
8700: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
8710: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
8720: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
8730: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
8740: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
8750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8760: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
8770: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8780: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
87a0: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
87b0: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
87c0: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
87d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
87e0: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
87f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8800: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
8810: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
8820: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
8830: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
8840: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
8850: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
8860: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
8870: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8880: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8890: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
88a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
88b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
88c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
88d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
88e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
88f0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
8900: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
8910: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
8920: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
8930: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
8940: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
8950: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
8960: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
8970: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
8980: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
8990: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
89a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
89b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
89c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
89d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
89e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
89f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
8a00: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
8a10: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
8a20: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
8a30: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
8a40: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
8a50: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
8a60: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
8a70: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
8a80: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
8a90: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
8aa0: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
8ab0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8ac0: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8ad0: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
8ae0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8af0: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
8b00: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
8b10: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
8b20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
8b30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
8b40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
8b50: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
8b60: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
8b70: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
8b80: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
8b90: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
8ba0: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
8bb0: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
8bc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
8bd0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8be0: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
8bf0: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
8c00: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
8c10: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
8c20: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
8c30: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c50: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
8c60: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
8c90: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
8cc0: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
8cf0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
8d00: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
8d10: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
8d20: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
8d30: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
8d40: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
8d50: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
8d60: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
8d70: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
8d80: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
8d90: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
8da0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
8db0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8dc0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8dd0: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
8de0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8df0: 43 48 52 4f 4e 4f 55 53 20 28 50 41 47 45 52 5f  CHRONOUS (PAGER_
8e00: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c  SYNCHRONOUS_FULL
8e10: 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  -1).#endif.#ifnd
8e20: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
8e30: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
8e40: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
8e50: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
8e60: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
8e70: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8e80: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
8e90: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8ea0: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8eb0: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8ec0: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8ed0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8ee0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
8ef0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
8f00: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
8f10: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
8f20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
8f30: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
8f40: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
8f50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
8f60: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
8f70: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8f80: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8f90: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8fa0: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8fb0: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8fc0: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8fd0: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8fe0: 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f  zDbSName;      /
8ff0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
9000: 61 74 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61  atabase. (schema
9010: 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e   name, not filen
9020: 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20  ame) */.  Btree 
9030: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
9040: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
9050: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
9060: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
9070: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
9080: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
9090: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
90a0: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
90b0: 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53  k */.  u8 bSyncS
90c0: 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  et;         /* T
90d0: 72 75 65 20 69 66 20 22 50 52 41 47 4d 41 20 73  rue if "PRAGMA s
90e0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61  ynchronous=N" ha
90f0: 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20  s been run */.  
9100: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9110: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
9120: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
9130: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
9140: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
9150: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9160: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9170: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9180: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9190: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
91a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
91b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
91c0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
91d0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
91e0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
91f0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9200: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9210: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9220: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9230: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9240: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
9250: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
9260: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9270: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
9280: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
9290: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
92a0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
92b0: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
92c0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
92d0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
92e0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
92f0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
9300: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
9310: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
9320: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
9330: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
9340: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
9350: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
9360: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
9370: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
9380: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
9390: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
93a0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
93b0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
93c0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
93d0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
93e0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
93f0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
9400: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
9410: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
9420: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
9430: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
9440: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
9450: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
9460: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
9470: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
9480: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
9490: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
94a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
94b0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
94c0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
94d0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
94e0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
94f0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
9500: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
9510: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
9520: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
9530: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
9540: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
9550: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
9560: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
9570: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
9580: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
9590: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
95a0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
95b0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
95c0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
95d0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
95e0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
95f0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
9600: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
9610: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
9620: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
9630: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
9640: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
9650: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
9660: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
9670: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
9680: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
9690: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
96a0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
96c0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
96d0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
96e0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
96f0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
9700: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
9710: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
9720: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
9730: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
9740: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
9750: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
9760: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
9770: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
9780: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
9790: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
97a0: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
97b0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
97c0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
97d0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
97e0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
97f0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
9800: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
9810: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
9820: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
9830: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
9840: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
9850: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
9860: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
9870: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
9880: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
9890: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
98a0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
98b0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
98c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
98d0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
98e0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
98f0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
9900: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
9910: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
9920: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
9930: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
9940: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
9950: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
9960: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
9970: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
9980: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
9990: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
99a0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
99b0: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
99c0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
99d0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
99e0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
99f0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
9a00: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
9a10: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
9a20: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
9a30: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
9a40: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
9a50: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
9a60: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
9a70: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
9a80: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
9a90: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
9aa0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
9ab0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
9ac0: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
9ad0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
9ae0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
9af0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
9b00: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
9b10: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
9b20: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
9b30: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
9b40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
9b50: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
9b60: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
9b70: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
9b80: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
9b90: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
9ba0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
9bb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
9bc0: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
9bd0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
9be0: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
9bf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
9c00: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
9c10: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
9c20: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
9c30: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
9c40: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
9c50: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
9c60: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
9c70: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
9c80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9c90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ca0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
9cb0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
9cc0: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
9cd0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
9ce0: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
9cf0: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
9d00: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
9d10: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
9d20: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
9d30: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9d40: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
9d50: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
9d60: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
9d70: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
9d80: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
9d90: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
9da0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
9db0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
9dc0: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
9dd0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
9de0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
9df0: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
9e00: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
9e10: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
9e20: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
9e30: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
9e40: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
9e50: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
9e60: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
9e70: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
9e80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9e90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ea0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
9eb0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9ec0: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
9ed0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
9ee0: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
9ef0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
9f00: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
9f10: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
9f20: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
9f30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9f40: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
9f50: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
9f60: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
9f70: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
9f80: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
9f90: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
9fa0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
9fb0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9fc0: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
9fd0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
9fe0: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
9ff0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a000: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
a010: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a020: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
a030: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
a040: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
a050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a060: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
a070: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
a080: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
a090: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
a0a0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
a0b0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
a0c0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
a0d0: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a0f0: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
a100: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
a110: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
a120: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
a130: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
a140: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
a150: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
a160: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
a170: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
a180: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
a190: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
a1a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
a1b0: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
a1c0: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
a1d0: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
a1e0: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
a1f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
a200: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
a210: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
a220: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
a230: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
a240: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
a250: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
a260: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
a270: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
a280: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
a290: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
a2a0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
a2b0: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
a2c0: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
a2d0: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
a2e0: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
a2f0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  on definitions. 
a300: 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   (Application-de
a310: 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f  fined.** functio
a320: 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72  ns use a regular
a330: 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f   table table fro
a340: 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a  m hash.h.).**.**
a350: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
a360: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
a370: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
a380: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
a390: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
a3a0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
a3b0: 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61  cDef.u.pHash cha
a3c0: 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  in..*/.#define S
a3d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
a3e0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
a3f0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
a400: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
a410: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
a420: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
a430: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
a440: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
a450: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
a460: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
a470: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
a480: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
a490: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
a4a0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
a4b0: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
a4c0: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
a4d0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
a4e0: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
a4f0: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
a500: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
a510: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
a520: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
a530: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
a540: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
a550: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
a560: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
a570: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
a580: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a590: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
a5a0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
a5b0: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
a5d0: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
a5e0: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
a5f0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
a600: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
a610: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
a620: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
a630: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
a640: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
a650: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
a660: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
a670: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
a680: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
a690: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
a6a0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
a6b0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
a6c0: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
a6d0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
a6e0: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
a6f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
a700: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
a710: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
a720: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
a730: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
a740: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
a750: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
a760: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
a770: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
a780: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
a790: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
a7a0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
a7b0: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
a7c0: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
a7d0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
a7e0: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
a7f0: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
a800: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
a810: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
a820: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
a830: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
a840: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
a850: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a860: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a870: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
a880: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
a890: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
a8a0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
a8b0: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
a8c0: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
a8d0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
a8e0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a8f0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a900: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
a910: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
a920: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
a930: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
a940: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a960: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
a970: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
a980: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
a990: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
a9a0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
a9b0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
a9c0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a9d0: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
aa00: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
aa10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
aa20: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a  IT_DEPRECATED./*
aa30: 20 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72   This is an extr
aa40: 61 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d  a SQLITE_TRACE m
aa50: 61 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61  acro that indica
aa60: 74 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61  tes "legacy" tra
aa70: 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73  cing.** in the s
aa80: 74 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  tyle of sqlite3_
aa90: 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69  trace().*/.#defi
aaa0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
aab0: 4c 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c  LEGACY  0x80.#el
aac0: 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  se.#define SQLIT
aad0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
aae0: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
aaf0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
ab00: 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ED */.../*.** Ea
ab10: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ab20: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
ab30: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
ab40: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ab50: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
ab60: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
ab70: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
ab80: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
ab90: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
aba0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
abb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
abc0: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
abd0: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
abe0: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
abf0: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
ac00: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
ac10: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ac20: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
ac30: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
ac40: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
ac50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
ac60: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
ac90: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
aca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
acb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
acc0: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
acd0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
ace0: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
ad10: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
ad20: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
ad30: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
ad40: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
ad50: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
ad60: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
ad70: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
ad80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad90: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
ada0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
adb0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
adc0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
add0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
ade0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
adf0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
ae00: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae20: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ae30: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
ae40: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
ae50: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
ae60: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
ae70: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
ae80: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
ae90: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
aea0: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
aeb0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
aec0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
aed0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
aee0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af00: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
af10: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
af20: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
af30: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
af40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
af50: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
af60: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af80: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
af90: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
afa0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
afb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
afc0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
afd0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
afe0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b000: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
b010: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
b020: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
b030: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
b040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
b050: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
b060: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b070: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
b080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
b090: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
b0a0: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
b0b0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
b0c0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
b0d0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
b0e0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
b0f0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
b100: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
b110: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
b120: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
b130: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
b140: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b150: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
b160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
b170: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
b180: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
b190: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
b1a0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
b1b0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
b1c0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
b1d0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
b1e0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
b1f0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
b200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
b210: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
b220: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
b230: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
b240: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
b250: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
b260: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
b270: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
b2a0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
b2b0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
b2c0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b2e0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
b2f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
b300: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
b310: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
b320: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b330: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b340: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b350: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
b360: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
b370: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
b380: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
b390: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
b3a0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
b3b0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
b3c0: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
b3d0: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
b3e0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
b3f0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
b400: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
b410: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
b420: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
b430: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
b440: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
b450: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
b460: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
b470: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
b480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
b490: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
b4a0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
b4b0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4d0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
b4e0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
b4f0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
b500: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
b510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
b520: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
b530: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
b540: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
b550: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
b560: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
b570: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
b580: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
b590: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
b5a0: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
b5b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b5c0: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
b5d0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
b5e0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
b5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b600: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b610: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
b620: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
b630: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
b640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b650: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b660: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
b670: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
b680: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
b690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b6a0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b6b0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
b6c0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
b6d0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
b6e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b6f0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
b700: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
b710: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
b720: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
b730: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b740: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
b750: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
b760: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
b770: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
b780: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
b790: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
b7a0: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
b7b0: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
b7c0: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
b7d0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
b7e0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b810: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
b820: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
b830: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
b840: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
b850: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
b860: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
b870: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
b880: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
b8b0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
b8c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
b8d0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
b8e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b8f0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
b900: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
b910: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
b920: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
b930: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
b940: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
b950: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
b960: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b970: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b980: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
b990: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
b9a0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
b9b0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
b9c0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
b9d0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
b9e0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
b9f0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
ba00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
ba10: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
ba20: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
ba30: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
ba40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ba50: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
ba60: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
ba70: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
ba80: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
ba90: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
baa0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
bab0: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
bac0: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
bad0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
bae0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
baf0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
bb00: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
bb10: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
bb20: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
bb30: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
bb40: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
bb50: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
bb60: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
bb70: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
bb80: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
bb90: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
bba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
bbb0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
bbc0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bbd0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
bbe0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
bbf0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
bc00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
bc10: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
bc20: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
bc30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
bc40: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
bc50: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
bc60: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
bc70: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
bc80: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
bc90: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
bca0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
bcb0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
bcc0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
bcd0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
bce0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bcf0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
bd00: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
bd10: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
bd20: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
bd30: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
bd40: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
bd50: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
bd60: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
bd70: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
bd80: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
bd90: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
bda0: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
bdb0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
bdc0: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
bdd0: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
bde0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
bdf0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
be00: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
be10: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
be20: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
be30: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
be40: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
be50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be60: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
be70: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
be80: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
be90: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
bea0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
beb0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
bec0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
bed0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
bee0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
bef0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
bf00: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
bf20: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
bf30: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
bf40: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
bf50: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
bf60: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
bf70: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
bf80: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
bf90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
bfa0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
bfb0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
bfc0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
bfd0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
bfe0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
bff0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
c000: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
c010: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
c020: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
c030: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
c040: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
c050: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
c060: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
c070: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
c080: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
c090: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
c0a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c0b0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
c0c0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
c0d0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
c0e0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
c0f0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
c100: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
c110: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c120: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61  ) */.#endif.  Ha
c130: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
c140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
c150: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
c160: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
c170: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
c180: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
c190: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
c1a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
c1b0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
c1c0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
c1d0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
c1e0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
c1f0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
c200: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
c210: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
c220: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
c230: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
c240: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
c250: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c260: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
c270: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
c280: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
c290: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
c2a0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
c2b0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
c2c0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c2e0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
c2f0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
c300: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
c310: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
c320: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c330: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
c340: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
c350: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
c360: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
c370: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
c380: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
c390: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
c3a0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c3b0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
c3c0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
c3d0: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
c3e0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
c3f0: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
c400: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c410: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
c420: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
c430: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
c440: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c450: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
c460: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
c470: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
c480: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
c490: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
c4a0: 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f  R.  ** mutex, no
c4b0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
c4c0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
c4d0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
c4e0: 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ify.c..  **.  **
c4f0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
c500: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
c510: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
c520: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
c530: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
c540: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
c550: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
c560: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
c570: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
c580: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
c590: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
c5a0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
c5b0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
c5c0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
c5d0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
c5e0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
c5f0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
c600: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
c610: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
c620: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
c630: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
c640: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
c650: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
c660: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
c670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c680: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
c690: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
c6a0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
c6b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c6c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c6d0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
c6e0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
c6f0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
c700: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
c710: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
c720: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
c730: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
c740: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
c750: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
c760: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
c770: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
c780: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
c790: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
c7a0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
c7b0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
c7c0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
c7d0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
c7e0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
c7f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
c800: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
c810: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
c820: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
c830: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
c840: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
c850: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
c860: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
c870: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
c880: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
c890: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c8a0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
c8b0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
c8c0: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
c8d0: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
c8e0: 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  :.**      SQLITE
c8f0: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d  _FullFSync     =
c900: 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e  = PAGER_FULLFSYN
c910: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
c920: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d  _CkptFullFSync =
c930: 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  = PAGER_CKPT_FUL
c940: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
c950: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c960: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43      == PAGER_CAC
c970: 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66  HE_SPILL.*/.#def
c980: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
c990: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
c9a0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
c9b0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
c9c0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
c9d0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
c9e0: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
c9f0: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
ca00: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
ca10: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
ca20: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
ca30: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34  mes   0x00000004
ca40: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
ca50: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
ca60: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
ca70: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
ca80: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
ca90: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
caa0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
cab0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
cac0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
cad0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20  ync  0x00000010 
cae0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
caf0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
cb00: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
cb10: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
cb20: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
cb30: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
cb40: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
cb50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
cb60: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
cb70: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
cb80: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
cb90: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cba0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
cbb0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
cbc0: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
cbd0: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
cbe0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc10: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
cc20: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
cc30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc60: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
cc70: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
cc80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc90: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
cca0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
ccb0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
ccc0: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
ccd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
cd00: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
cd10: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
cd20: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
cd30: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
cd40: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
cd50: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
cd60: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cd70: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
cd80: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
cd90: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
cda0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
cdb0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
cdc0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
cdd0: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
cde0: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
cdf0: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
ce00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ce10: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
ce20: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
ce30: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
ce40: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
ce50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ce60: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
ce70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
ce80: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
ce90: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
cea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ceb0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
cec0: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
ced0: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
cee0: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
cef0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
cf00: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
cf10: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
cf20: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
cf30: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
cf40: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
cf50: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
cf60: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
cf70: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
cf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
cf90: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
cfa0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
cfb0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
cfc0: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
cfd0: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
cfe0: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
cff0: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
d000: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
d010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d020: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
d030: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
d040: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
d050: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
d060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d070: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
d080: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
d090: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
d0a0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
d0b0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
d0c0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
d0d0: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
d0e0: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
d0f0: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
d100: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d110: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
d120: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d130: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d150: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d160: 38 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  800000  /* Enabl
d170: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d180: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d1a0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  1000000  /* True
d1c0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d1d0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d1e0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d1f0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
d200: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
d210: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d220: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
d230: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
d240: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  04000000  /* Dis
d250: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
d260: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
d270: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
d280: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
d290: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
d2a0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
d2b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d2c0: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
d2d0: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
d2e0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
d2f0: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
d300: 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43  SQLITE_CellSizeC
d310: 6b 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30  k     0x20000000
d320: 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65    /* Check btree
d330: 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c   cell sizes on l
d340: 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  oad */.#define S
d350: 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69  QLITE_Fts3Tokeni
d360: 7a 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20  zer  0x40000000 
d370: 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f   /* Enable fts3_
d380: 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a  tokenizer(2) */.
d390: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
d3a0: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
d3b0: 38 30 30 30 30 30 30 30 20 20 2f 2a 20 4e 6f 20  80000000  /* No 
d3c0: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
d3d0: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
d3e0: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
d3f0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
d400: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
d410: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
d420: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
d430: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
d440: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
d450: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
d460: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
d470: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
d480: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
d490: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
d4a0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
d4b0: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
d4c0: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
d4d0: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
d4e0: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
d4f0: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
d500: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
d510: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d520: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
d530: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
d540: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
d550: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
d560: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
d570: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
d580: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
d590: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
d5a0: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
d5b0: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
d5c0: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
d5d0: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
d5e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
d5f0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
d600: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
d610: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
d620: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d630: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
d640: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
d650: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
d660: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d670: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
d680: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
d690: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
d6a0: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
d6b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
d6c0: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
d6d0: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
d6e0: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
d6f0: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
d700: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
d710: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
d720: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
d730: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d740: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d750: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
d760: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
d770: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
d780: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
d790: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
d7a0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
d7b0: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
d7c0: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
d7d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
d7e0: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
d7f0: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
d800: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
d810: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d820: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
d830: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
d840: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
d850: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
d860: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
d870: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
d880: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
d890: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
d8a0: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
d8b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
d8c0: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
d8d0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
d8e0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d8f0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
d900: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
d910: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
d920: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
d930: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
d940: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
d950: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
d960: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
d970: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
d980: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
d990: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
d9a0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
d9b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
d9c0: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
d9d0: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
d9e0: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
d9f0: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
da00: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
da10: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
da20: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
da30: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
da40: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
da50: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
da60: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
da70: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
da80: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
da90: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
daa0: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
dab0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
dac0: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
dad0: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
dae0: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
daf0: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
db00: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
db10: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
db20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
db30: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
db40: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
db50: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
db60: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
db70: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
db80: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
db90: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
dba0: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
dbb0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
dbc0: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
dbd0: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
dbe0: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
dbf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc00: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
dc10: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
dc20: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
dc30: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
dc40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dc50: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
dc60: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
dc70: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
dc80: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
dc90: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dca0: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
dcb0: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
dcc0: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
dcd0: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
dce0: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
dcf0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
dd00: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
dd10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
dd20: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
dd30: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
dd40: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
dd50: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
dd60: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
dd70: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
dd80: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
dd90: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
dda0: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
ddb0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
ddc0: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
ddd0: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
dde0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
ddf0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
de00: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
de10: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
de20: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
de30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
de40: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
de50: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
de60: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
de70: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
de80: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
de90: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
dea0: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
deb0: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
dec0: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
ded0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
dee0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
def0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
df00: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
df10: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
df20: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
df30: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
df40: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
df50: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
df60: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
df70: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
df80: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
df90: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
dfa0: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
dfb0: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
dfc0: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
dfd0: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
dfe0: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
dff0: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
e000: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
e010: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
e020: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e040: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
e050: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
e060: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
e070: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
e080: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
e090: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
e0a0: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
e0b0: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
e0c0: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
e0d0: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
e0e0: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
e0f0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
e100: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
e110: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
e120: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e130: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
e140: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
e150: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
e160: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
e170: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
e180: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
e190: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
e1a0: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
e1b0: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
e1c0: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
e1d0: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
e1e0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
e1f0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
e200: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
e210: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
e220: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
e230: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
e240: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
e250: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
e260: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
e270: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
e280: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
e290: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
e2a0: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
e2b0: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
e2c0: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
e2d0: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
e2e0: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
e2f0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
e300: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
e310: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
e320: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
e330: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
e340: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
e350: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
e360: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
e370: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
e380: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
e390: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
e3a0: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
e3b0: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
e3c0: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
e3d0: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
e3e0: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
e3f0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
e400: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
e410: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
e420: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
e430: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
e440: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
e450: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e460: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
e470: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
e480: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e490: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
e4a0: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
e4b0: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
e4c0: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
e4d0: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
e4e0: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
e4f0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
e500: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
e510: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
e520: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
e530: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
e540: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
e550: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
e560: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
e570: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
e580: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
e590: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
e5a0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
e5b0: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
e5c0: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
e5d0: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
e5e0: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
e5f0: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
e600: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
e610: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
e620: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
e630: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
e640: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
e650: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
e660: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
e670: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
e680: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
e690: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
e6a0: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
e6b0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
e6c0: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
e6d0: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
e6e0: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
e6f0: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
e700: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
e710: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
e720: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
e730: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
e740: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
e750: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
e760: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
e770: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
e780: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
e790: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e7a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
e7b0: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
e7c0: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
e7d0: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
e7e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e7f0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
e800: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
e810: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
e820: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
e830: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
e840: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
e850: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
e860: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
e870: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
e880: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e890: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
e8a0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
e8b0: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
e8c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e8d0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
e8e0: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
e8f0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
e900: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e910: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
e920: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
e930: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
e940: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
e950: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e960: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
e970: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
e980: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
e990: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
e9a0: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
e9b0: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
e9c0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
e9d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e9e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e9f0: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
ea00: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
ea10: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
ea20: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
ea30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ea40: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
ea50: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
ea60: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
ea70: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
ea80: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ea90: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
eaa0: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
eab0: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
eac0: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
eaf0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
eb00: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
eb10: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
eb20: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
eb30: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
eb40: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
eb50: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
eb60: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
eb70: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
eb80: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
eb90: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
eba0: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
ebb0: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ebc0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ebd0: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
ebe0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
ebf0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
ec00: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
ec10: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
ec20: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
ec30: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
ec40: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
ec50: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
ec60: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
ec70: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
ec80: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
ec90: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
eca0: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
ecb0: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
ecc0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
ecd0: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
ece0: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
ecf0: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
ed00: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
ed10: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
ed20: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
ed30: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
ed40: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ed50: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ed60: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
ed70: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
ed80: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
ed90: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
eda0: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
edb0: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
edc0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
edd0: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
ede0: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
edf0: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
ee00: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
ee10: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
ee20: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
ee30: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
ee40: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
ee50: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
ee60: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
ee70: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
ee80: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
ee90: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
eea0: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
eeb0: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
eec0: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
eed0: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
eee0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
eef0: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
ef00: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
ef10: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
ef20: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
ef30: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
ef40: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
ef50: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
ef60: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
ef70: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ef80: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ef90: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
efa0: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
efb0: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
efc0: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
efd0: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
efe0: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
eff0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
f000: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
f010: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
f020: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
f030: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
f040: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
f050: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
f060: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
f070: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
f080: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
f090: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
f0a0: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
f0b0: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
f0c0: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
f0d0: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
f0e0: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
f0f0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
f100: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
f110: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
f120: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
f130: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
f140: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
f150: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
f160: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
f170: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
f180: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
f190: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
f1a0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f1b0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
f1c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f1d0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
f1e0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f1f0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
f200: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
f210: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
f220: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f230: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
f240: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f250: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f260: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f270: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
f280: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
f290: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
f2a0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
f2b0: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
f2c0: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
f2d0: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
f2e0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f2f0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f300: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
f310: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f320: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
f330: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f340: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f350: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
f360: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
f370: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
f380: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
f390: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
f3a0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f3b0: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
f3c0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
f3d0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f3e0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
f3f0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
f400: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
f410: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
f420: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f430: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f440: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f450: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
f460: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
f470: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f480: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f490: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
f4a0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
f4b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f4c0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
f4d0: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
f4e0: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
f4f0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
f500: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
f510: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
f520: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f530: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
f540: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
f550: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
f560: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
f570: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
f580: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
f590: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
f5a0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
f5b0: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f5c0: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f5d0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f5e0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f5f0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
f600: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
f610: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
f620: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
f630: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
f640: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
f650: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
f660: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f670: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f680: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
f690: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
f6a0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
f6b0: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
f6c0: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
f6d0: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
f6e0: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
f6f0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f700: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
f710: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
f720: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
f730: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
f740: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
f750: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
f760: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
f770: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
f780: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
f790: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
f7a0: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
f7b0: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
f7c0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
f7d0: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
f7e0: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f800: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
f810: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
f820: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
f830: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
f840: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f850: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
f860: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
f870: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
f880: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
f890: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f8a0: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
f8b0: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
f8c0: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f8e0: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
f8f0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
f900: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
f910: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
f920: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
f930: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
f940: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
f950: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
f960: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
f970: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
f980: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
f990: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
f9a0: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
f9b0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
f9c0: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
f9d0: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
f9e0: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
f9f0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
fa00: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
fa10: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
fa20: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
fa30: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
fa40: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
fa50: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
fa60: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
fa70: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
fa80: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
fa90: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
faa0: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
fab0: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
fac0: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
fad0: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
fae0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fb00: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
fb10: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
fb20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
fb30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
fb40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
fb50: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
fb60: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
fb70: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
fb80: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
fb90: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
fba0: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
fbb0: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
fbc0: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fbe0: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
fbf0: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
fc00: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
fc10: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
fc20: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
fc30: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
fc40: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
fc50: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
fc60: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fc70: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
fc80: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
fc90: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
fca0: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
fcb0: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
fcc0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
fcd0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
fce0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
fcf0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
fd00: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
fd10: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
fd20: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
fd30: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
fd40: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
fd50: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
fd60: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
fd70: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
fd80: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
fd90: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
fda0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
fdb0: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
fdc0: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
fdd0: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
fde0: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
fdf0: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
fe00: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
fe10: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
fe20: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
fe30: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
fe40: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
fe50: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
fe60: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fe70: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
fe80: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
fe90: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
fea0: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
feb0: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
fec0: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
fed0: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
fee0: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
fef0: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
ff00: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
ff10: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
ff20: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
ff30: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
ff40: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
ff50: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
ff60: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
ff70: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
ff80: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
ff90: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ffa0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ffb0: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
ffc0: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
ffd0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
ffe0: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
fff0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
10000 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
10010 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
10020 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
10030 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
10040 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
10050 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
10060 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
10070 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
10080 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
10090 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
100a0 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
100b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
100c0 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
100d0 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
100e0 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
100f0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10100 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
10110 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
10120 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
10130 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
10140 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
10150 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
10160 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
10170 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
10180 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
10190 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
101a0 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
101b0 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
101c0 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
101d0 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
101e0 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
101f0 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
10200 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
10210 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
10220 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
10230 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
10240 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
10250 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10260 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
10270 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
10280 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
10290 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
102a0 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
102b0 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
102c0 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
102d0 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
102e0 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
102f0 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
10300 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
10310 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
10320 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
10330 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
10340 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
10350 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
10360 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
10370 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
10380 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
10390 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
103a0 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
103b0 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
103c0 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
103d0 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
103e0 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
103f0 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
10400 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
10410 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
10420 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
10430 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
10440 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
10450 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
10460 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
10470 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
10480 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
10490 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
104a0 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
104b0 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
104c0 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
104d0 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
104e0 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
104f0 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
10500 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
10510 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
10520 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
10530 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
10540 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
10550 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10560 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
10570 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10580 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
10590 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
105a0 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
105b0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
105c0 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
105d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
105e0 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
105f0 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
10600 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
10610 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
10620 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
10630 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
10640 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
10650 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
10660 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
10670 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
10680 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
10690 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
106a0 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
106b0 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
106c0 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
106d0 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
106e0 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
106f0 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
10700 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
10710 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
10720 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
10730 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
10740 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
10750 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
10760 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
10770 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
10780 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
10790 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
107a0 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
107b0 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
107c0 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
107d0 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
107e0 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
107f0 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
10800 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
10810 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
10820 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20  TE_KEEPNULL     
10830 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79  0x08  /* Used by
10840 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e   vector == or <>
10850 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10860 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
10870 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
10880 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
10890 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
108a0 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
108b0 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
108c0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
108d0 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
108e0 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
108f0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
10900 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
10910 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
10920 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
10930 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
10940 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
10950 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
10960 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
10970 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
10980 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
10990 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
109a0 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
109b0 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
109c0 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
109d0 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
109e0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
109f0 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
10a00 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
10a10 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
10a20 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
10a30 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
10a40 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
10a50 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
10a60 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
10a70 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
10a80 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
10a90 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
10aa0 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
10ab0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10ac0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
10ad0 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
10ae0 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
10af0 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
10b00 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
10b10 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10b20 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
10b30 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
10b40 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10b50 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
10b60 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
10b70 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
10b80 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
10b90 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10ba0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
10bb0 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
10bc0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10bd0 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
10be0 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
10bf0 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
10c00 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
10c10 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
10c20 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
10c30 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
10c40 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
10c50 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
10c60 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
10c70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
10c80 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
10c90 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10ca0 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
10cb0 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
10cc0 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
10cd0 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
10ce0 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
10cf0 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
10d00 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
10d10 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
10d20 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10d30 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
10d40 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
10d50 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
10d60 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10d70 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10d80 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10d90 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10da0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
10db0 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
10dc0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
10dd0 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
10de0 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
10df0 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
10e00 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
10e10 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
10e20 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
10e30 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
10e40 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
10e50 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
10e60 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10e70 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10e80 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10e90 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10ea0 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
10eb0 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
10ec0 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
10ed0 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
10ee0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10ef0 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
10f00 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
10f10 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
10f20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
10f30 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
10f40 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
10f50 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
10f60 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10f70 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10f80 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10f90 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10fa0 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
10fb0 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
10fc0 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
10fd0 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
10fe0 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
10ff0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
11000 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
11010 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
11020 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
11030 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
11040 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
11050 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
11060 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
11070 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
11080 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
11090 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
110a0 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
110b0 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
110c0 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
110d0 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
110e0 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
110f0 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
11100 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
11110 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
11120 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
11130 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
11140 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
11150 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
11160 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
11170 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
11180 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
11190 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
111a0 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
111b0 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
111c0 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
111d0 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
111e0 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
111f0 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
11200 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
11210 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
11220 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
11230 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
11240 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
11250 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
11260 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
11270 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
11280 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
11290 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
112a0 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
112b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
112c0 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
112d0 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
112e0 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
112f0 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
11300 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
11310 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
11320 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
11330 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
11340 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
11350 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
11360 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
11370 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
11380 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
11390 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
113a0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
113b0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
113c0 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
113d0 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
113f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
11400 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
11410 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
11420 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
11430 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
11440 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
11450 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
11460 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
11470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
11480 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
11490 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
114a0 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
114b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
114c0 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
114d0 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
114e0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
114f0 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
11500 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
11510 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
11520 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
11530 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
11540 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11550 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
11560 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
11570 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11580 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
11590 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
115a0 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
115b0 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
115c0 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
115d0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
115e0 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
115f0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
11600 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
11610 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
11620 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
11630 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
11640 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
11650 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
11660 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
11670 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
11680 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
11690 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
116a0 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
116b0 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
116c0 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
116d0 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
116e0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
116f0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11700 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
11710 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
11720 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
11730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11740 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
11750 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
11760 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
11770 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
11780 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
11790 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
117a0 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
117b0 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
117c0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
117d0 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
117e0 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
117f0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
11800 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
11810 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11820 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
11830 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
11840 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
11850 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11860 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
11870 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
11880 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
11890 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
118a0 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
118b0 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
118c0 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
118d0 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
118e0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
118f0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
11900 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
11910 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
11920 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
11930 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
11940 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
11950 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
11960 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
11970 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
11980 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
11990 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
119a0 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
119b0 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
119c0 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
119d0 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
119e0 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
119f0 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
11a00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11a10 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
11a20 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
11a30 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
11a40 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
11a50 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
11a60 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
11a70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11a80 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11a90 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
11aa0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
11ab0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
11ac0 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
11ad0 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
11ae0 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
11af0 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
11b00 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
11b10 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
11b20 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
11b30 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
11b40 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
11b50 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
11b60 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
11b70 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
11b80 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
11b90 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11ba0 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11bb0 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
11bc0 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
11bd0 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
11be0 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
11bf0 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
11c00 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
11c10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
11c20 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
11c30 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
11c40 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
11c50 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
11c60 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
11c70 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
11c80 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
11c90 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11ca0 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
11cb0 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
11cc0 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
11cd0 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
11ce0 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
11cf0 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
11d00 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11d10 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
11d20 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
11d30 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
11d40 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
11d50 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
11d60 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11d70 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11d80 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11d90 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11da0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
11db0 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
11dc0 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
11dd0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
11de0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
11df0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
11e00 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
11e10 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
11e20 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
11e30 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
11e40 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
11e50 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
11e60 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11e70 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11e80 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11e90 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11ea0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
11eb0 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
11ec0 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
11ed0 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
11ee0 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11ef0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
11f00 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
11f10 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
11f20 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
11f30 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
11f40 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
11f50 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
11f60 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11f70 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11f80 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11f90 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11fa0 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
11fb0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
11fc0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
11fd0 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
11fe0 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
11ff0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
12000 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
12010 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
12020 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
12030 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
12040 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
12050 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
12060 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
12070 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
12080 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12090 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
120a0 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
120b0 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
120c0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
120d0 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
120e0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
120f0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
12100 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
12110 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
12120 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
12130 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
12140 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
12150 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
12160 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
12170 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
12180 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
12190 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
121a0 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
121b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
121c0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
121d0 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
121e0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
121f0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
12200 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
12210 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
12220 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
12230 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
12240 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12250 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12260 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12270 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12280 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12290 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
122a0 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
122b0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
122c0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
122d0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
122e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
122f0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
12300 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
12310 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
12320 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
12330 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
12340 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
12350 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12360 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
12370 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12380 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12390 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
123a0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
123b0 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
123c0 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
123d0 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
123e0 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
123f0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
12400 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
12410 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
12420 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
12430 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
12440 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
12450 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
12460 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
12470 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
12480 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
12490 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
124a0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
124b0 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
124c0 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
124d0 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
124e0 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
124f0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
12500 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
12510 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
12520 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
12530 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
12540 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
12550 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
12560 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
12570 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
12580 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
12590 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
125a0 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
125b0 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
125c0 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
125d0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
125e0 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
125f0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
12600 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
12610 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
12620 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
12630 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
12640 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
12650 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
12660 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
12670 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
12680 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
12690 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
126a0 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
126b0 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
126c0 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
126d0 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
126e0 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
126f0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
12700 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
12710 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
12720 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
12730 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
12740 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
12750 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
12760 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
12770 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
12780 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
12790 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
127a0 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
127b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
127c0 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
127d0 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
127e0 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
127f0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
12800 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
12810 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
12820 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
12830 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
12840 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
12850 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
12860 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
12870 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
12880 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
12890 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
128a0 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
128b0 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
128c0 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
128d0 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
128e0 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
128f0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
12900 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
12910 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
12920 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
12930 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
12940 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
12950 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
12960 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
12970 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
12980 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
12990 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
129a0 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
129b0 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
129c0 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
129d0 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
129e0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
129f0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
12a00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12a10 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
12a20 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
12a30 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
12a40 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
12a50 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
12a60 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
12a70 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
12a80 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
12a90 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
12aa0 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
12ab0 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
12ac0 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
12ad0 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
12ae0 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
12af0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
12b00 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
12b10 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
12b20 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
12b30 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
12b40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
12b50 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
12b60 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
12b70 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
12b80 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
12b90 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12ba0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
12bb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12bc0 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
12bd0 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
12be0 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
12bf0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
12c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
12c10 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
12c20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
12c30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
12c40 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
12c50 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
12c60 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
12c70 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
12c80 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
12c90 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12ca0 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
12cb0 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
12cc0 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
12cd0 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
12ce0 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
12cf0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
12d00 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
12d10 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
12d20 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
12d30 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
12d40 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
12d50 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
12d60 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12d70 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12d80 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12d90 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12da0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
12db0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
12dc0 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
12dd0 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
12de0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12df0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
12e00 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
12e10 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
12e20 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
12e30 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
12e40 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
12e50 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
12e60 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12e70 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12e80 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12e90 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12ea0 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
12eb0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
12ec0 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
12ed0 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
12ee0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
12ef0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
12f00 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
12f10 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
12f20 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
12f30 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
12f40 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
12f50 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12f60 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12f70 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12f80 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12f90 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12fa0 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
12fb0 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12fc0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
12fd0 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
12fe0 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
12ff0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
13000 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
13010 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
13020 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
13030 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
13040 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
13050 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
13060 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
13070 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
13080 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
13090 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
130a0 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
130b0 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
130c0 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
130d0 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
130e0 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
130f0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
13100 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
13110 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
13120 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
13130 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
13140 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
13150 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
13160 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
13170 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
13180 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
13190 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
131a0 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
131b0 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
131c0 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
131d0 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
131e0 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
131f0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
13200 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
13210 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
13220 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
13230 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
13240 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
13250 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
13260 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
13270 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
13280 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
13290 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
132a0 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
132b0 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
132c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
132d0 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
132e0 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
132f0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
13300 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
13310 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
13320 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
13330 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
13340 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
13350 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
13360 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
13370 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
13380 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
13390 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
133a0 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
133b0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
133c0 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
133d0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
133e0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
133f0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13400 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
13410 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13420 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
13430 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
13440 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
13450 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
13460 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
13470 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
13480 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
13490 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
134a0 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
134b0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
134c0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
134d0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
134e0 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
134f0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
13500 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
13510 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
13520 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
13530 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
13540 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
13550 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
13560 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
13570 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
13580 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
13590 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
135a0 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
135b0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
135c0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
135d0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
135e0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
135f0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
13600 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
13610 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
13620 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13630 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
13640 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
13650 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
13660 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
13670 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
13680 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
13690 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
136a0 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
136b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
136c0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
136d0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
136e0 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
136f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13700 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
13710 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
13720 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
13730 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
13740 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
13750 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
13760 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
13770 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
13780 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
13790 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
137a0 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
137b0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
137c0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
137d0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
137e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
137f0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
13800 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
13810 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
13820 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
13830 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
13840 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
13850 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
13860 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
13870 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
13880 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
13890 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
138a0 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
138b0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
138c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
138d0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
138e0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
138f0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
13900 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
13910 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
13920 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
13930 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
13940 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
13950 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
13960 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
13970 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
13980 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
13990 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
139a0 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
139b0 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
139c0 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
139d0 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
139e0 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
139f0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
13a00 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
13a10 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
13a20 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
13a30 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
13a40 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
13a50 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
13a60 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
13a70 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
13a80 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
13a90 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
13aa0 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
13ab0 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
13ac0 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
13ad0 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
13ae0 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
13af0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
13b00 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
13b10 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
13b20 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
13b30 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
13b40 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
13b50 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
13b60 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
13b70 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
13b80 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
13b90 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13ba0 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
13bb0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13bc0 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
13bd0 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
13be0 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
13bf0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
13c00 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
13c10 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
13c20 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
13c30 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
13c40 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
13c50 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
13c60 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
13c70 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
13c80 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
13c90 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13ca0 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
13cb0 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
13cc0 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
13cd0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
13ce0 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
13cf0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
13d00 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
13d10 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
13d20 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
13d30 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
13d40 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
13d50 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
13d60 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13d70 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13d80 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13d90 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13da0 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
13db0 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
13dc0 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
13dd0 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
13de0 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
13df0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
13e00 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
13e10 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
13e20 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
13e30 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
13e40 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
13e50 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
13e60 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13e70 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13e80 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13e90 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13ea0 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
13eb0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
13ec0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
13ed0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
13ee0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
13ef0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
13f00 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
13f10 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
13f20 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
13f30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13f40 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
13f50 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
13f60 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13f70 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13f80 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13f90 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13fa0 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
13fb0 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
13fc0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
13fd0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
13fe0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
13ff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14000 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
14010 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
14020 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
14030 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
14040 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
14050 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
14060 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
14070 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14080 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
14090 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
140a0 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
140b0 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
140c0 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
140d0 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
140e0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
140f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
14100 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
14110 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
14120 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
14130 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
14140 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
14150 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
14160 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
14170 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
14180 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
14190 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
141a0 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
141b0 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
141c0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
141d0 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
141e0 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
141f0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
14200 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
14210 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
14220 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
14230 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
14240 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
14250 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
14260 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
14270 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
14280 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
14290 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
142a0 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
142b0 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
142c0 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
142d0 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
142e0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
142f0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
14300 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
14310 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
14320 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
14330 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
14340 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
14350 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
14360 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
14370 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
14380 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
14390 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
143a0 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
143b0 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
143c0 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
143d0 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
143e0 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
143f0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
14400 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
14410 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
14420 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
14430 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
14440 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
14450 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
14460 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
14470 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
14480 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
14490 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
144a0 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
144b0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
144c0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
144d0 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
144e0 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
144f0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
14500 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
14510 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
14520 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
14530 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
14540 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
14550 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
14560 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
14570 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
14580 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
14590 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
145a0 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
145b0 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
145c0 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
145d0 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
145e0 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
145f0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
14600 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14610 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
14620 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
14630 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
14640 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
14650 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
14660 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
14670 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
14680 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
14690 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
146a0 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
146b0 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
146c0 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
146d0 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
146e0 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
146f0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
14700 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
14710 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
14720 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
14730 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
14740 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
14750 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
14760 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
14770 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
14780 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
14790 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
147a0 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
147b0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
147c0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
147d0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
147e0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
147f0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
14800 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
14810 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
14820 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
14830 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
14840 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
14850 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
14860 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
14870 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
14880 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
14890 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
148a0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
148b0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
148c0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
148d0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
148e0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
148f0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
14900 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
14910 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
14920 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
14930 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
14940 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
14950 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
14960 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
14970 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
14980 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
14990 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
149a0 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
149b0 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
149c0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
149d0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
149e0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
149f0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
14a00 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
14a10 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
14a20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
14a30 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
14a40 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
14a50 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14a60 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
14a70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
14a80 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
14a90 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
14aa0 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
14ab0 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
14ac0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
14ad0 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
14ae0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
14af0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
14b00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14b10 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
14b20 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
14b30 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
14b40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14b50 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
14b60 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
14b70 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
14b80 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14b90 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14ba0 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
14bb0 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
14bc0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
14bd0 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
14be0 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
14bf0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
14c00 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
14c10 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
14c20 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
14c30 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
14c40 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
14c50 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
14c60 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
14c70 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
14c80 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
14c90 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14ca0 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
14cb0 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
14cc0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
14cd0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
14ce0 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
14cf0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
14d00 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
14d10 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
14d20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
14d30 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
14d40 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
14d50 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
14d60 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14d70 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14d80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14d90 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14da0 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
14db0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14dc0 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
14dd0 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
14de0 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
14df0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
14e00 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
14e10 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
14e20 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14e30 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
14e40 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
14e50 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
14e60 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14e70 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14e80 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14e90 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14ea0 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
14eb0 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
14ec0 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
14ed0 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
14ee0 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
14ef0 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
14f00 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
14f10 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
14f20 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
14f30 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
14f40 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
14f50 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14f60 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14f70 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14f80 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14f90 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14fa0 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
14fb0 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
14fc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14fd0 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
14fe0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
14ff0 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
15000 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
15010 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
15020 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
15030 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
15040 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
15050 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
15060 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
15070 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
15080 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
15090 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
150a0 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
150b0 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
150c0 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
150d0 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
150e0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
150f0 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
15100 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
15110 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
15120 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
15130 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
15140 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
15150 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
15160 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
15170 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
15180 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
15190 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
151a0 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
151b0 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
151c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
151d0 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
151e0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
151f0 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
15200 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
15210 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
15220 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
15230 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
15240 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
15250 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
15260 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
15270 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
15280 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
15290 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
152a0 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
152b0 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
152c0 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
152d0 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
152e0 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
152f0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
15300 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
15310 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
15320 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
15330 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
15340 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
15350 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
15360 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
15370 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
15380 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
15390 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
153a0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
153b0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
153c0 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
153d0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
153e0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
153f0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
15400 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
15410 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
15420 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15430 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
15440 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
15450 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
15460 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
15470 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
15480 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
15490 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
154a0 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
154b0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
154c0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
154d0 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
154e0 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
154f0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
15500 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
15510 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
15520 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
15530 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
15540 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
15550 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
15560 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
15570 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
15580 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
15590 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
155a0 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
155b0 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
155c0 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
155d0 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
155e0 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
155f0 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
15600 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
15610 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
15620 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
15630 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
15640 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
15650 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15660 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
15670 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
15680 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15690 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
156a0 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
156b0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
156c0 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
156d0 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
156e0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
156f0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
15700 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
15710 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
15720 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
15730 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
15740 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
15750 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
15760 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
15770 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
15780 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
15790 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
157a0 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
157b0 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
157c0 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
157d0 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
157e0 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
157f0 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
15800 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
15810 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
15820 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
15830 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
15840 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
15850 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
15860 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
15870 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
15880 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
15890 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
158a0 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
158b0 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
158c0 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
158d0 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
158e0 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
158f0 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
15920 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
15930 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
15940 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
15950 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
15960 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
15970 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
15980 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15990 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
159c0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
159d0 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
159e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
159f0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
15a00 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
15a10 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
15a20 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
15a30 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
15a40 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
15a50 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
15a60 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
15a70 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15a80 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
15a90 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
15aa0 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
15ab0 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
15ac0 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
15ad0 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
15ae0 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
15af0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
15b00 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
15b10 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
15b20 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
15b30 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
15b40 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
15b50 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
15b60 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15b70 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
15b80 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
15b90 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15ba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15bb0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15bc0 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
15bd0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15be0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
15bf0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
15c00 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
15c10 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15c20 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
15c30 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
15c40 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
15c50 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15c60 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
15c70 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
15c80 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
15c90 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15ca0 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
15cb0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15cc0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15cd0 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
15ce0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
15cf0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
15d00 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15d10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
15d20 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
15d30 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
15d40 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
15d50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15d60 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15d70 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15d80 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
15db0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
15dc0 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
15dd0 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
15e00 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
15e10 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
15e20 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
15e30 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
15e40 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
15e50 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15e60 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15e70 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15e80 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15e90 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15eb0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15ec0 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
15ed0 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
15ee0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
15ef0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
15f00 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
15f10 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
15f20 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
15f30 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
15f40 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
15f50 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
15f60 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15f70 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15f80 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15f90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15fa0 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
15fb0 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
15fc0 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
15fd0 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
15fe0 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
15ff0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
16000 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
16010 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
16020 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
16030 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
16040 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
16050 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
16060 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
16070 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
16080 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
16090 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
160a0 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
160b0 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
160c0 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
160d0 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
160e0 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
160f0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
16100 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
16110 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
16120 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
16130 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
16140 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
16150 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
16160 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
16170 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16180 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
16190 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
161a0 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
161b0 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
161c0 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
161d0 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
161e0 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
161f0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
16200 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
16210 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
16220 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
16230 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
16240 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
16250 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
16260 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
16270 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
16280 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
16290 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
162a0 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
162b0 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
162c0 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
162d0 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
162e0 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
162f0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
16300 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
16310 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
16320 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
16330 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
16340 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
16350 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
16360 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
16370 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
16380 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
16390 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
163a0 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
163b0 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
163c0 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
163d0 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
163e0 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
163f0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
16400 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
16410 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
16420 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
16430 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
16440 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
16450 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
16460 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
16470 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
16480 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
16490 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
164a0 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
164b0 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
164c0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
164d0 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
164e0 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
164f0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
16500 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
16510 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
16520 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
16530 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
16540 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
16550 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
16560 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
16570 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
16580 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
16590 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
165a0 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
165b0 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
165c0 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
165d0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
165e0 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
165f0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
16600 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
16610 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
16620 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
16630 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
16640 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
16650 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
16660 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
16670 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
16680 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
16690 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
166a0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
166b0 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
166c0 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
166d0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
166e0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
166f0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
16700 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
16710 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
16720 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
16730 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
16740 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
16750 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
16760 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
16770 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
16780 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
16790 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
167a0 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
167b0 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
167c0 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
167d0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
167e0 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
167f0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
16800 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
16810 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
16820 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
16830 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
16840 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
16850 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
16860 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
16870 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
16880 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
16890 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
168a0 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
168b0 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
168c0 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
168d0 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
168e0 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
168f0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
16900 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
16910 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
16920 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
16930 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
16940 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
16950 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
16960 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
16970 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
16980 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
16990 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
169a0 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
169b0 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
169c0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
169d0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
169e0 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
169f0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
16a00 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
16a10 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
16a20 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
16a30 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
16a40 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
16a50 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
16a60 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
16a70 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
16a80 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
16a90 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
16aa0 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
16ab0 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
16ac0 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
16ad0 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
16ae0 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
16af0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
16b00 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
16b10 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
16b20 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
16b30 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
16b40 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
16b50 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
16b60 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
16b70 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
16b80 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
16b90 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16ba0 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
16bb0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16bc0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
16bd0 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
16be0 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
16bf0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
16c00 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
16c10 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
16c20 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
16c30 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
16c40 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
16c50 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
16c60 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
16c70 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
16c80 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
16c90 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16ca0 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
16cb0 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
16cc0 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
16cd0 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
16ce0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
16cf0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
16d00 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
16d10 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
16d20 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
16d30 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
16d40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
16d50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
16d60 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16d70 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16d80 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16d90 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16da0 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
16db0 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
16dc0 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
16dd0 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
16de0 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
16df0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
16e00 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
16e10 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
16e20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
16e30 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
16e40 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
16e50 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
16e60 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16e70 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16e80 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16e90 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16ea0 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
16eb0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16ec0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
16ed0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
16ee0 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16f00 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
16f10 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
16f20 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
16f30 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
16f40 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
16f50 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
16f60 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16f70 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16f90 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16fa0 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
16fb0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
16fc0 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
16fd0 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
16fe0 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
16ff0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
17000 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
17010 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
17020 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
17030 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
17040 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
17050 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
17060 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
17070 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
17080 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
17090 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
170a0 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
170b0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
170c0 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
170d0 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
170e0 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
170f0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
17100 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
17110 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
17120 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
17130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17160 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
17170 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
17180 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
17190 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
171a0 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
171b0 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
171c0 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
171d0 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
171e0 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
171f0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
17200 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
17210 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
17220 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
17230 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
17240 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
17250 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
17260 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
17270 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
17280 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
17290 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
172a0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
172b0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
172c0 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
172d0 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
172e0 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
172f0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
17300 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
17310 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
17320 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
17330 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
17340 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17350 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17360 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
17380 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
17390 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
173a0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
173b0 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
173c0 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
173d0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
173e0 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
173f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17400 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
17410 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
17420 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
17430 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
17440 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17450 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
17460 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
17490 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
174a0 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
174c0 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
174d0 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
174e0 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17500 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
17510 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
17520 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
17530 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
17540 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
17550 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
17560 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
17570 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
175a0 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
175b0 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
175e0 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
175f0 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
17600 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
17610 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
17620 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
17630 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
17640 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
17650 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
17660 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
17670 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
17680 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
17690 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
176a0 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
176b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
176c0 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
176d0 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
176e0 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17700 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
17710 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
17720 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
17750 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
17760 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
17770 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
17780 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
17790 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
177a0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
177b0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
177c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
177d0 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
177e0 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
177f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
17800 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
17810 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
17820 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
17830 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
17840 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
17850 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
17860 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
17870 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
17880 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
17890 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
178a0 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
178b0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
178c0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
178d0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
178e0 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
178f0 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
17900 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
17910 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
17920 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
17930 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
17940 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
17950 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
17960 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
17970 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
17980 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
17990 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
179a0 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
179b0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
179c0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
179d0 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
179e0 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
179f0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
17a00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
17a10 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
17a20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
17a30 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
17a40 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
17a50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
17a60 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
17a70 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
17a80 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
17a90 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
17aa0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
17ab0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
17ac0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
17ad0 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
17ae0 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
17af0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
17b00 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
17b10 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
17b20 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
17b30 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
17b40 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
17b50 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
17b60 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
17b70 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
17b80 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
17b90 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
17ba0 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
17bb0 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
17bc0 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
17bd0 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
17be0 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
17bf0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
17c00 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
17c10 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
17c20 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
17c30 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
17c40 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
17c50 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
17c60 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
17c70 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
17c80 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
17c90 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
17ca0 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
17cb0 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
17cc0 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
17cd0 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
17ce0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
17cf0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
17d00 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
17d10 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
17d20 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
17d30 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
17d40 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
17d50 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
17d60 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
17d70 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
17d80 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
17d90 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
17da0 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
17db0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
17dc0 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
17dd0 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
17de0 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
17df0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
17e00 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
17e10 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
17e20 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
17e30 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
17e40 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
17e50 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
17e60 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
17e70 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
17e80 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
17e90 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
17ea0 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
17eb0 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
17ec0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
17ed0 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
17ee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
17ef0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
17f00 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
17f10 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
17f20 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
17f30 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74  ../*.** Combinat
17f40 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d  ions of two or m
17f50 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a  ore EP_* flags.*
17f60 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f  /.#define EP_Pro
17f70 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61  pagate (EP_Colla
17f80 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20  te|EP_Subquery) 
17f90 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65  /* Propagate the
17fa0 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20  se bits up tree 
17fb0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
17fc0 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
17fd0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
17fe0 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
17ff0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
18000 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
18010 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
18020 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
18030 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
18040 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
18050 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
18060 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
18070 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
18080 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
18090 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
180a0 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
180b0 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
180c0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
180d0 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
180e0 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
180f0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
18100 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
18110 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
18120 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
18130 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
18140 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
18150 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
18160 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
18170 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
18180 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
18190 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
181a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
181b0 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
181c0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
181d0 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
181e0 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
181f0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
18200 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
18210 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
18220 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
18230 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
18240 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
18250 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
18260 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
18270 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
18280 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
18290 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
182a0 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
182b0 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
182c0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
182d0 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
182e0 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
182f0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
18300 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
18310 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
18320 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
18330 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
18340 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
18350 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
18360 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
18370 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
18380 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
18390 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
183a0 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
183b0 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
183c0 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
183d0 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
183e0 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
183f0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
18400 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
18410 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
18420 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
18430 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
18440 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
18450 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
18460 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
18470 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
18480 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
18490 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
184a0 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
184b0 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
184c0 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
184d0 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
184e0 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
184f0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
18500 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
18510 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
18520 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
18530 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
18540 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
18550 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
18560 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
18570 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
18580 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
18590 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
185a0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
185b0 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
185c0 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
185d0 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
185e0 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
185f0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
18600 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
18610 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
18620 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
18630 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
18640 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
18650 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
18660 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
18670 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
18680 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
18690 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
186a0 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
186b0 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
186c0 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
186d0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
186e0 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
186f0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
18700 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
18710 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
18720 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
18730 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
18740 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
18750 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
18760 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
18770 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
18780 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
18790 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
187a0 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
187b0 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
187c0 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
187d0 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
187e0 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
187f0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
18800 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18810 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
18820 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
18830 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
18840 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
18850 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
18860 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
18870 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
18880 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
18890 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
188a0 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
188b0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
188c0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
188d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
188e0 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
188f0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
18900 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
18910 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
18920 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
18930 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
18940 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
18950 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
18960 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
18970 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
18980 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
18990 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
189a0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
189b0 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
189c0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
189d0 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
189e0 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
189f0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
18a00 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
18a10 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
18a20 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
18a30 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
18a40 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
18a50 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
18a60 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
18a70 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
18a80 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
18a90 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
18aa0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
18ab0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
18ac0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
18ad0 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
18ae0 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
18af0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
18b00 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
18b10 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
18b20 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
18b30 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
18b40 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
18b50 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
18b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
18b70 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
18b80 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
18b90 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
18ba0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
18bb0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
18bc0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
18bd0 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
18be0 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
18bf0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
18c00 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
18c10 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
18c20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
18c30 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
18c40 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
18c50 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
18c60 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
18c70 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
18c80 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
18c90 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
18ca0 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
18cb0 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
18cc0 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
18cd0 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
18ce0 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
18cf0 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
18d00 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
18d10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
18d20 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
18d30 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
18d40 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
18d50 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
18d60 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
18d70 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
18d80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
18d90 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
18da0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
18db0 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
18dc0 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
18dd0 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
18de0 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
18df0 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
18e00 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
18e10 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
18e20 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
18e30 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
18e40 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
18e50 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
18e60 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
18e70 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
18e80 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
18e90 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
18ea0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
18eb0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
18ec0 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
18ed0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
18ee0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
18ef0 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
18f00 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
18f10 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
18f20 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
18f30 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
18f40 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
18f50 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
18f60 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
18f70 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
18f80 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
18f90 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
18fa0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
18fb0 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
18fc0 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
18fd0 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
18fe0 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
18ff0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
19000 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
19010 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
19020 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
19030 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
19040 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
19050 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
19060 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
19070 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
19080 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
19090 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
190a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
190b0 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
190c0 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
190d0 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
190e0 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
190f0 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
19100 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
19110 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
19120 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
19130 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74  BITMASK_TYPE.  t
19140 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ypedef SQLITE_BI
19150 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61  TMASK_TYPE Bitma
19160 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
19170 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
19180 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
19190 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
191a0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
191b0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
191c0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
191d0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
191e0 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
191f0 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
19200 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
19210 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
19220 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
19230 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
19240 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
19250 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
19260 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  nt)1)<<(n)).#def
19270 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20  ine ALLBITS     
19280 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a   ((Bitmask)-1)..
19290 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
192a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
192b0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
192c0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
192d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
192e0 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
192f0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
19300 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
19310 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
19320 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
19330 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
19340 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
19350 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
19360 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
19370 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
19380 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
19390 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
193a0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
193b0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
193c0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
193d0 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
193e0 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
193f0 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
19400 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
19410 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
19420 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
19430 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
19440 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
19450 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
19460 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
19470 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
19480 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
19490 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
194a0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
194b0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
194c0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
194d0 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
194e0 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
194f0 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
19500 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
19510 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
19520 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
19530 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
19540 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
19550 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
19560 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
19570 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
19580 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
19590 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
195a0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
195b0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
195c0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
195d0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
195e0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
195f0 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
19600 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
19610 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
19620 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
19630 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
19640 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
19650 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
19660 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
19670 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
19680 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
19690 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
196a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
196b0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
196c0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
196d0 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
196e0 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
196f0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
19700 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
19710 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
19720 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
19730 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
19740 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
19750 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
19760 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
19770 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
19780 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
19790 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
197a0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
197b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
197c0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
197d0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
197e0 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
197f0 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
19800 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
19810 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
19820 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
19830 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
19840 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
19850 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
19860 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
19870 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
19880 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
19890 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
198a0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
198b0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
198c0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
198d0 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
198e0 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
198f0 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
19900 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
19910 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
19920 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
19930 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
19940 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
19950 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
19960 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
19970 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
19980 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
19990 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ine */.    struc
199a0 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69  t {.      u8 joi
199b0 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
199c0 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
199d0 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61  een this table a
199e0 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
199f0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
19a00 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
19a10 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
19a20 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
19a30 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
19a40 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
19a50 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
19a60 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
19a70 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
19a80 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
19a90 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
19aa0 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
19ab0 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
19ac0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
19ad0 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
19ae0 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
19af0 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
19b00 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
19b10 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
19b20 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
19b30 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
19b40 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
19b50 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
19b60 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
19b70 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
19b80 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
19b90 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
19ba0 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
19bb0 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
19bc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
19bd0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
19be0 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
19bf0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
19c00 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
19c10 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
19c20 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
19c30 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
19c40 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
19c50 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
19c60 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
19c70 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
19c80 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
19c90 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
19ca0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
19cb0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
19cc0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
19cd0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
19ce0 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
19cf0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
19d00 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
19d10 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
19d20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
19d30 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
19d40 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
19d50 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
19d60 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
19d70 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
19d80 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
19d90 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
19da0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
19db0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
19dc0 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
19dd0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
19de0 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
19df0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
19e00 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
19e10 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
19e20 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
19e30 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
19e40 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
19e50 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
19e60 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
19e70 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
19e80 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
19e90 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
19ea0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
19eb0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
19ec0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
19ed0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
19ee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
19ef0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
19f00 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
19f10 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
19f20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
19f30 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
19f40 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
19f50 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
19f60 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
19f70 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
19f80 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
19f90 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
19fa0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
19fb0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
19fc0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
19fd0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
19fe0 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
19ff0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1a000 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1a010 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1a020 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1a030 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1a040 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1a050 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1a060 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1a070 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1a080 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1a090 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1a0a0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1a0b0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1a0c0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1a0d0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1a0e0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1a0f0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1a100 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1a110 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1a120 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1a130 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a140 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1a150 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1a160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a170 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1a180 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1a190 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1a1a0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1a1b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a1c0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1a1d0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1a1e0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1a1f0 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1a200 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a210 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1a220 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1a230 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1a240 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1a250 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1a260 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1a270 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1a280 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1a290 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1a2a0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1a2b0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1a2c0 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1a2d0 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1a2e0 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1a2f0 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1a300 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1a310 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1a320 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1a330 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1a360 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1a370 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1a380 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1a390 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1a3a0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1a3b0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1a3c0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1a3d0 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1a3e0 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1a3f0 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1a400 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1a410 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a420 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1a430 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1a440 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1a450 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1a460 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1a470 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1a480 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1a490 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1a4a0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1a4b0 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1a4c0 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1a4d0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1a4e0 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1a4f0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1a500 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1a510 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1a520 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1a530 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1a540 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1a550 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1a560 20 30 78 31 30 30 30 20 20 20 20 6e 6f 74 20 63   0x1000    not c
1a570 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1a580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a590 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1a5a0 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1a5b0 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1a5c0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1a5d0 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1a5e0 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1a5f0 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1a600 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1a630 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1a640 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1a650 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1a660 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1a670 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1a680 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1a690 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1a6a0 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1a6b0 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1a6c0 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1a6d0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1a6e0 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1a6f0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1a700 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a710 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1a720 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1a730 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1a740 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1a750 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1a760 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1a770 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1a780 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1a790 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1a7a0 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1a7b0 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1a7c0 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1a7d0 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1a7e0 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1a7f0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1a800 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1a810 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1a820 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1a830 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1a840 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1a850 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1a860 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1a870 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1a880 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1a890 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a8a0 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1a8b0 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1a8c0 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1a8d0 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1a8e0 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1a8f0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1a900 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1a910 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1a920 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1a930 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1a940 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1a950 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1a960 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1a970 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1a980 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1a990 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1a9a0 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1a9b0 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1a9c0 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1a9d0 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1a9e0 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1a9f0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1aa00 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1aa10 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1aa20 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1aa30 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1aa40 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1aa50 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1aa60 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1aa70 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1aa80 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1aa90 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1aaa0 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1aab0 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1aac0 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1aad0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1aae0 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1aaf0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1ab00 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1ab10 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1ab20 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1ab30 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1ab40 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1ab50 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1ab60 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1ab70 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1ab80 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1ab90 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1aba0 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1abb0 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1abc0 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1abd0 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1abe0 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1abf0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1ac00 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1ac10 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1ac20 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1ac30 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1ac40 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1ac50 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1ac60 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1ac70 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1ac80 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1ac90 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1aca0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
1acb0 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1acc0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1acd0 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1ace0 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
1acf0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
1ad00 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
1ad10 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
1ad20 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
1ad30 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ad50 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
1ad60 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
1ad70 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
1ad80 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1ad90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1ada0 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
1adb0 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
1adc0 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
1add0 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
1ade0 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
1adf0 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
1ae00 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
1ae10 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1ae20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1ae30 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1ae40 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1ae50 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1ae60 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1ae70 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1ae80 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1ae90 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1aea0 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1aeb0 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1aec0 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1aed0 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1aee0 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1aef0 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1af00 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1af10 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1af20 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1af30 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1af40 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1af50 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1af60 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1af70 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1af80 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1af90 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1afa0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1afb0 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1afc0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1afd0 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1afe0 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1aff0 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1b000 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1b010 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1b020 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1b030 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1b040 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1b050 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1b060 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1b070 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1b080 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1b090 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1b0a0 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1b0b0 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1b0c0 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1b0d0 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1b0e0 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1b0f0 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1b100 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1b110 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1b120 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1b130 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  bove */../*.** A
1b140 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1b150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b160 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
1b170 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
1b180 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
1b190 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
1b1a0 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
1b1b0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
1b1c0 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
1b1d0 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
1b1e0 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
1b1f0 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
1b200 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
1b210 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
1b220 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
1b230 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
1b240 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
1b250 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
1b260 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
1b270 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
1b280 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
1b290 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
1b2a0 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
1b2b0 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
1b2c0 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
1b2d0 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
1b2e0 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
1b2f0 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
1b300 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
1b310 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
1b320 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1b330 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1b340 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1b350 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1b360 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1b370 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1b380 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1b390 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1b3a0 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1b3b0 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1b3c0 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1b3d0 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1b3e0 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1b3f0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1b400 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1b410 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1b420 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1b430 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1b440 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1b450 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1b460 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1b470 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1b480 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1b490 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1b4a0 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1b4b0 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1b4c0 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1b4d0 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1b4e0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1b4f0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1b500 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1b510 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1b520 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1b530 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1b540 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1b550 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1b560 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1b570 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1b580 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1b590 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1b5a0 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1b5b0 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1b5c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1b5d0 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1b5e0 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1b5f0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1b600 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1b610 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1b620 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1b630 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1b640 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1b650 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1b660 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1b670 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1b680 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1b690 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1b6a0 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1b6b0 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1b6c0 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1b6d0 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
1b6e0 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
1b6f0 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1b700 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1b710 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1b720 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1b730 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1b740 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1b750 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1b760 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1b770 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1b780 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1b790 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1b7a0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1b7b0 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1b7c0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1b7d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1b7e0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1b7f0 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1b800 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1b810 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1b820 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1b830 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1b840 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1b850 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1b860 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1b870 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1b880 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1b890 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1b8a0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1b8b0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1b8c0 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1b8d0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1b8e0 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1b8f0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1b900 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1b910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1b920 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1b930 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1b940 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ed. */.  Expr *p
1b950 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20  Offset;         
1b960 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  /* OFFSET expres
1b970 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1b980 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1b990 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1b9a0 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1b9b0 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1b9c0 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1b9d0 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r NULL. */.};../
1b9e0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1b9f0 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1ba00 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1ba10 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1ba20 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1ba30 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1ba40 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1ba50 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1ba60 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1ba70 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1ba80 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1ba90 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1baa0 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1bab0 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1bac0 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1bad0 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1bae0 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1baf0 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1bb00 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1bb10 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1bb20 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1bb30 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1bb40 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1bb50 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1bb60 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1bb70 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1bb80 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1bb90 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1bba0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1bbb0 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1bbc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1bbd0 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1bbe0 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1bbf0 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1bc00 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1bc10 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1bc20 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1bc30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1bc40 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1bc50 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1bc60 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1bc70 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1bc80 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1bc90 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1bca0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1bcb0 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1bcc0 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1bcd0 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1bce0 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1bcf0 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1bd00 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1bd10 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1bd20 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1bd30 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1bd40 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1bd50 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1bd60 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1bd70 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1bd80 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1bd90 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1bda0 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1bdb0 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1bdc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1bdd0 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1bde0 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1bdf0 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1be00 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1be10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1be20 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1be30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1be40 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1be50 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1be60 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1be70 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1be80 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1be90 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1bea0 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1beb0 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1bec0 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1bed0 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1bee0 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1bef0 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1bf00 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1bf10 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1bf20 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1bf30 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1bf40 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1bf50 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1bf60 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1bf70 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1bf80 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1bf90 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1bfa0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1bfb0 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1bfc0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1bfd0 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1bfe0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1bff0 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1c000 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1c010 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1c020 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a  s in output */..
1c030 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1c040 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1c050 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1c060 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1c070 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1c080 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1c090 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1c0a0 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1c0b0 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1c0c0 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1c0d0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c0e0 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1c0f0 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1c100 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1c110 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c130 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1c140 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1c150 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1c160 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1c170 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1c180 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1c190 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1c1a0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1c1b0 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1c1c0 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1c1d0 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1c1e0 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1c1f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c200 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1c210 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1c220 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1c230 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1c240 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1c250 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1c260 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1c270 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1c280 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1c290 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1c2a0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1c2d0 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1c2e0 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1c2f0 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1c300 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1c310 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1c320 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1c330 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1c340 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1c350 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1c360 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1c370 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1c380 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1c390 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1c3a0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c3b0 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1c3c0 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1c3d0 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1c3e0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1c3f0 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1c400 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1c410 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1c420 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1c440 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1c450 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1c460 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1c490 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1c4a0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1c4b0 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1c4d0 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1c4e0 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1c4f0 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1c500 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1c510 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1c520 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1c530 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1c540 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1c570 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1c580 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1c590 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1c5a0 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1c5b0 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1c5c0 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1c5d0 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1c600 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1c610 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1c620 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1c630 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1c640 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1c650 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1c660 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1c690 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1c6a0 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1c6b0 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1c6c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c6d0 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1c6e0 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1c6f0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1c720 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1c730 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1c740 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1c750 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1c760 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1c770 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1c780 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1c790 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1c7a0 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1c7b0 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1c7c0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1c7d0 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1c7e0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1c7f0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1c820 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1c830 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1c840 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1c870 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1c880 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1c890 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1c8c0 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1c8d0 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1c8e0 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1c8f0 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1c900 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c910 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1c920 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1c930 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1c940 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1c950 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1c980 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1c990 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1c9a0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1c9b0 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1c9c0 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1c9d0 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1c9e0 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1ca10 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1ca20 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1ca30 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1ca40 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1ca50 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ca60 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ca70 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1ca80 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1ca90 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1caa0 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1cad0 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1cae0 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1caf0 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1cb10 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1cb20 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1cb30 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1cb40 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1cb50 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1cb60 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1cb70 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1cb80 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1cba0 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1cbb0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1cbc0 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1cbd0 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1cbf0 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1cc00 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1cc10 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1cc20 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1cc30 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1cc40 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc60 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1cc70 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1cc80 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1cc90 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1ccb0 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1ccc0 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1ccd0 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1cce0 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1ccf0 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1cd00 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1cd10 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1cd20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1cd30 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1cd40 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1cd50 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1cd60 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1cd70 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1cd80 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1cd90 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1cda0 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1cdb0 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1cdc0 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1cdd0 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1cde0 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1cdf0 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1ce00 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1ce10 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1ce20 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1ce30 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1ce40 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1ce50 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1ce60 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1ce70 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1ce80 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1ce90 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1cea0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1ceb0 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1cec0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1ced0 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1cee0 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1cef0 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1cf00 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1cf10 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1cf20 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1cf30 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1cf40 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1cf50 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1cf60 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1cf70 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1cf80 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1cf90 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1cfa0 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1cfb0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1cfc0 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1cfd0 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1cfe0 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1cff0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1d000 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1d010 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1d020 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1d030 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1d040 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1d050 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1d060 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1d070 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1d080 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1d090 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1d0a0 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1d0b0 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1d0c0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1d0d0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1d0e0 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1d0f0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1d100 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1d110 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1d120 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1d130 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1d140 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1d150 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1d160 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1d170 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d180 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1d190 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1d1a0 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1d1b0 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1d1c0 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1d1d0 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1d1e0 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
1d1f0 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
1d200 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1d210 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1d220 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
1d230 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1d240 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1d250 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1d260 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1d270 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1d280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1d290 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1d2a0 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1d2b0 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1d2c0 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1d2d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1d2e0 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1d2f0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d300 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1d310 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1d320 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1d330 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1d340 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1d350 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1d360 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1d370 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1d380 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1d390 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1d3a0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1d3b0 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1d3c0 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1d3d0 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1d3e0 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1d3f0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1d400 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1d410 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1d420 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1d430 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1d440 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1d450 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1d460 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1d470 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1d480 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1d490 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1d4a0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1d4b0 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1d4c0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1d4d0 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1d4e0 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1d4f0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1d500 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1d510 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1d520 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1d530 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1d540 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1d550 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1d560 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1d570 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1d580 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1d590 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1d5a0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1d5b0 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1d5c0 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1d5d0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1d5e0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1d5f0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1d600 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1d610 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1d620 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1d630 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1d640 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1d650 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1d660 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1d670 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1d680 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1d690 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1d6a0 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1d6b0 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1d6c0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1d6d0 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1d6e0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d6f0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1d700 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1d710 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1d720 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1d730 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1d740 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1d750 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1d760 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1d770 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1d780 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1d790 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1d7a0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1d7b0 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1d7c0 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1d7d0 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1d7e0 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1d7f0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1d800 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1d810 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1d820 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1d830 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1d840 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1d850 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1d860 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1d870 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1d880 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1d890 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1d8a0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1d8b0 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1d8c0 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1d8d0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1d8e0 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1d8f0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1d900 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1d910 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1d920 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1d930 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1d940 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1d950 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1d960 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1d970 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1d980 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1d990 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1d9a0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1d9b0 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1d9c0 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1d9d0 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1d9e0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1d9f0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1da00 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1da10 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1da20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1da30 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1da40 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1da50 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1da60 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1da70 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1da80 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1da90 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1daa0 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1dab0 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1dac0 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1dad0 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1dae0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1daf0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1db00 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1db10 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1db20 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1db30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1db40 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1db50 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1db60 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1db70 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1db80 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1db90 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1dba0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1dbb0 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1dbc0 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1dbd0 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1dbe0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1dbf0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1dc00 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1dc10 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1dc20 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1dc30 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1dc40 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1dc50 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1dc60 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1dc70 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1dc80 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1dc90 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1dca0 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1dcb0 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1dcc0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1dcd0 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1dce0 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1dcf0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1dd00 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1dd10 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1dd20 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1dd30 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1dd40 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1dd50 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1dd60 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1dd70 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1dd80 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1dd90 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1dda0 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1ddb0 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1ddc0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1ddd0 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1dde0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1ddf0 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1de00 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1de10 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1de20 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1de30 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1de40 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1de50 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1de60 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1de70 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1de80 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1de90 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1dea0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1deb0 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1dec0 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1ded0 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1dee0 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1def0 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1df00 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1df10 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1df20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1df30 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1df40 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1df50 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1df60 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1df70 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1df80 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1df90 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1dfa0 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1dfb0 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1dfc0 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1dfd0 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1dfe0 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1dff0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1e000 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1e010 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1e020 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1e030 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1e040 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1e050 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1e060 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
1e070 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1e080 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1e090 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1e0a0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1e0b0 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1e0c0 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1e0d0 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1e0e0 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1e0f0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1e100 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1e110 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1e120 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1e130 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1e140 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1e150 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1e160 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1e170 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1e180 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1e190 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1e1a0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1e1b0 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1e1c0 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1e1d0 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1e1e0 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1e1f0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1e200 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1e210 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1e220 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1e230 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1e240 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1e250 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1e260 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1e270 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1e280 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1e290 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1e2a0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1e2b0 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1e2c0 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1e2d0 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1e2e0 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1e2f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1e300 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1e310 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1e320 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1e330 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1e340 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1e350 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1e360 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1e370 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1e380 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1e390 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1e3a0 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1e3b0 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1e3c0 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1e3d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1e3e0 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1e3f0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1e400 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1e410 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1e420 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1e430 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1e440 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1e450 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1e460 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1e470 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1e480 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1e490 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1e4a0 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
1e4b0 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
1e4c0 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
1e4d0 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
1e4e0 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
1e4f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e500 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
1e510 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e  lCache[] */.  in
1e520 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1e530 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1e540 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1e550 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1e560 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1e570 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1e580 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1e590 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1e5a0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1e5b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1e5c0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1e5d0 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1e5e0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1e5f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1e600 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1e610 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1e620 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1e630 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e640 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1e650 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1e660 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1e670 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1e680 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1e690 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1e6a0 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  Op[] */.  int sz
1e6b0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
1e6c0 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
1e6d0 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
1e6e0 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1e6f0 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1e700 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1e710 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1e720 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1e730 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1e740 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
1e750 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1e760 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68 6f 73  of an index whos
1e770 65 20 65 78 70 72 73 20 61 72 65 20 62 65 69 6e  e exprs are bein
1e780 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74  g coded */.  int
1e790 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1e7a0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1e7b0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1e7c0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1e7d0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1e7e0 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1e7f0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1e800 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1e810 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1e820 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1e830 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1e840 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1e850 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1e860 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1e870 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1e880 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1e890 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1e8a0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1e8b0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1e8c0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1e8d0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1e8e0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1e8f0 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1e900 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1e910 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1e920 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1e930 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1e940 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1e950 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1e960 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1e970 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1e980 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1e990 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1e9a0 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1e9b0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1e9c0 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1e9d0 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1e9e0 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1e9f0 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1ea00 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1ea10 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1ea20 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1ea30 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1ea40 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1ea50 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1ea60 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1ea70 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1ea80 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1ea90 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1eaa0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1eab0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1eac0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1ead0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1eae0 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1eaf0 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1eb00 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1eb10 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1eb20 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1eb30 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1eb40 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1eb50 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1eb60 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1eb70 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1eb80 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1eb90 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1eba0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1ebb0 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1ebc0 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1ebd0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1ebe0 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1ebf0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1ec00 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1ec10 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
1ec20 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1ec30 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1ec40 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1ec50 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1ec60 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1ec70 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1ec80 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1ec90 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1eca0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1ecb0 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1ecc0 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1ecd0 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1ece0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1ecf0 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1ed00 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1ed10 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1ed20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1ed30 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1ed40 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1ed50 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1ed60 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1ed70 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1ed80 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1ed90 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1eda0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1edb0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1edc0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1edd0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1ede0 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1edf0 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1ee00 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1ee10 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1ee20 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1ee30 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1ee40 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1ee50 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1ee60 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1ee70 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1ee80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ee90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eeb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eec0 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
1eed0 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
1eee0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
1eef0 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
1ef00 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
1ef10 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
1ef20 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
1ef30 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
1ef40 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
1ef50 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
1ef60 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
1ef70 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
1ef80 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
1ef90 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
1efa0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
1efb0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
1efc0 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a  ColCache)..  ***
1efd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1efe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1eff0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f000 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f010 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75  *******/..  stru
1f020 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1f030 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1f040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1f050 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1f060 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1f070 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1f080 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1f090 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1f0a0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1f0b0 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1f0c0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1f0d0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1f0e0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1f0f0 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1f100 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1f110 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1f120 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1f130 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1f140 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1f150 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1f160 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1f170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1f180 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1f190 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1f1a0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1f1b0 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1f1c0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1f1d0 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1f1e0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1f1f0 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  e entry */.  int
1f200 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
1f210 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
1f220 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
1f230 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
1f240 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1f250 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
1f260 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
1f270 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
1f280 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  t name */.  Toke
1f290 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1f2a0 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1f2b0 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1f2c0 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1f2d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1f310 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1f320 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1f330 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1f340 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1f350 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1f360 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1f370 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1f380 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1f390 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1f3a0 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1f3b0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56  ffsetof(Parse,nV
1f3c0 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72 20  ar) so the nVar 
1f3d0 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1f3e0 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20 20  e first field.  
1f3f0 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ** in the recurs
1f400 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1f410 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f420 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f450 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61 72  ******/..  ynVar
1f460 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20   nVar;          
1f470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f480 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
1f490 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
1f4a0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1f4b0 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
1f4c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f4d0 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
1f4e0 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
1f4f0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1f500 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1f510 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1f520 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1f530 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1f540 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1f550 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1f560 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1f570 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1f580 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1f590 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1f5a0 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1f5b0 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1f5c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1f5d0 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1f5e0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1f5f0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1f600 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f610 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1f620 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1f630 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1f640 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1f650 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1f660 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1f670 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1f680 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1f690 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1f6a0 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1f6b0 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1f6c0 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1f6d0 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1f6e0 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1f6f0 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1f700 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1f710 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1f720 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1f730 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1f740 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a  ndif.  char **az
1f750 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
1f760 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20   /* Pointers to 
1f770 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74  names of paramet
1f780 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
1f790 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
1f7a0 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
1f7b0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
1f7c0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
1f7d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1f7e0 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
1f7f0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
1f800 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
1f810 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
1f820 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
1f830 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
1f840 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
1f850 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
1f860 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
1f870 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
1f880 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
1f890 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
1f8a0 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
1f8b0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
1f8c0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
1f8d0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
1f8e0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
1f8f0 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
1f900 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
1f910 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1f920 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
1f930 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
1f940 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
1f950 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
1f960 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
1f970 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
1f980 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
1f990 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
1f9a0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
1f9b0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
1f9c0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
1f9d0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
1f9e0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
1f9f0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
1fa00 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
1fa10 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
1fa20 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
1fa30 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
1fa40 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
1fa50 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1fa60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
1fa70 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
1fa80 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1fa90 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
1faa0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
1fab0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
1fac0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
1fad0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
1fae0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
1faf0 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
1fb00 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
1fb10 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
1fb20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
1fb30 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
1fb40 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
1fb50 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  e) /* Recursive 
1fb60 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
1fb70 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
1fb80 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
1fb90 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e 56 61  fsetof(Parse,nVa
1fba0 72 29 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65  r)  /* Recursive
1fbb0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
1fbc0 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
1fbd0 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
1fbe0 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
1fbf0 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
1fc00 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
1fc10 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
1fc20 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
1fc30 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
1fc40 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
1fc50 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
1fc60 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
1fc70 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
1fc80 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
1fc90 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
1fca0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
1fcb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
1fcc0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1fcd0 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
1fce0 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
1fcf0 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
1fd00 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
1fd10 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1fd20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1fd30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1fd40 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
1fd50 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
1fd60 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
1fd70 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
1fd80 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
1fd90 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
1fda0 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
1fdb0 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
1fdc0 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
1fdd0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1fde0 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
1fdf0 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
1fe00 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
1fe10 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
1fe20 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
1fe30 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
1fe40 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
1fe50 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
1fe60 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
1fe70 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
1fe80 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
1fe90 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1fea0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1feb0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
1fec0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
1fed0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
1fee0 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
1fef0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
1ff00 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
1ff10 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
1ff20 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
1ff30 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
1ff40 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
1ff50 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
1ff60 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
1ff70 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
1ff80 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
1ff90 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
1ffa0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
1ffb0 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
1ffc0 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
1ffd0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
1ffe0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
1fff0 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
20000 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
20010 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
20020 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
20030 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
20040 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20070 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
20080 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
20090 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
200a0 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
200b0 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
200c0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
200d0 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
200e0 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
200f0 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
20100 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
20110 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
20120 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
20130 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
20140 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
20150 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
20160 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
20170 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
20180 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
20190 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
201a0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
201b0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
201c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
201d0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
201e0 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
201f0 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
20200 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
20210 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
20220 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
20230 54 45 5f 48 4f 4f 4b 0a 23 64 65 66 69 6e 65 20  TE_HOOK.#define 
20240 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20  OPFLAG_ISNOOP   
20250 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
20260 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70  OP_Delete does p
20270 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f  re-update-hook o
20280 6e 6c 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64  nly */.#endif.#d
20290 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
202a0 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
202b0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
202c0 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
202d0 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
202e0 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
202f0 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
20300 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
20310 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
20320 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
20330 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
20340 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
20350 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
20360 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
20370 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20380 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
20390 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
203a0 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
203b0 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
203c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
203d0 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
203e0 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
203f0 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
20400 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
20410 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
20420 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
20430 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
20440 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
20450 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
20460 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
20470 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
20480 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
20490 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
204a0 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
204b0 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
204c0 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
204d0 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65  /* OP_Delete: ke
204e0 65 70 20 63 75 72 73 6f 72 20 70 6f 73 69 74 69  ep cursor positi
204f0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
20500 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
20510 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50     0x04    /* OP
20520 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69  _Delete: index i
20530 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f  n a DELETE op */
20540 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69  ../*. * Each tri
20550 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20  gger present in 
20560 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
20570 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73  ema is stored as
20580 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a   an instance of.
20590 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65   * struct Trigge
205a0 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72  r.. *. * Pointer
205b0 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f  s to instances o
205c0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
205d0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
205e0 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49  wo ways.. * 1. I
205f0 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22  n the "trigHash"
20600 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72   hash table (par
20610 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  t of the sqlite3
20620 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74  * that represent
20630 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61  s the. *    data
20640 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f  base). This allo
20650 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63  ws Trigger struc
20660 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72  tures to be retr
20670 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20  ieved by name.. 
20680 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72  * 2. All trigger
20690 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
206a0 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  h a single table
206b0 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c   form a linked l
206c0 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20  ist, using the. 
206d0 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65  *    pNext membe
206e0 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  r of struct Trig
206f0 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74  ger. A pointer t
20700 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
20710 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20  ent of the. *   
20720 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20   linked list is 
20730 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70  stored as the "p
20740 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20  Trigger" member 
20750 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  of the associate
20760 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54  d. *    struct T
20770 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20  able.. *. * The 
20780 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
20790 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  er points to the
207a0 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
207b0 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a  f a linked list.
207c0 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68   * containing th
207d0 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  e SQL statements
207e0 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68   specified as th
207f0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
20800 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  m.. */.struct Tr
20810 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a  igger {.  char *
20820 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
20830 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66    /* The name of
20840 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20   the trigger    
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20860 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74      */.  char *t
20870 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
20880 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72   /* The table or
20890 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74   view to which t
208a0 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69  he trigger appli
208b0 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  es */.  u8 op;  
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208d0 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
208e0 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
208f0 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20  TK_INSERT       
20900 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b    */.  u8 tr_tm;
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20920 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52  * One of TRIGGER
20930 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52  _BEFORE, TRIGGER
20940 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72  _AFTER */.  Expr
20950 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20   *pWhen;        
20960 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20      /* The WHEN 
20970 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78  clause of the ex
20980 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65  pression (may be
20990 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69   NULL) */.  IdLi
209a0 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20  st *pColumns;   
209b0 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
209c0 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c  s an UPDATE OF <
209d0 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69  column-list> tri
209e0 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  gger,.          
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c     the <column-l
20a10 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68  ist> is stored h
20a20 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
20a30 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
20a40 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
20a50 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
20a60 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  r */.  Schema *p
20a70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f  TabSchema;     /
20a80 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
20a90 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ing the table */
20aa0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
20ab0 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69  step_list; /* Li
20ac0 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67  nk list of trigg
20ad0 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73  er program steps
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
20af0 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74    Trigger *pNext
20b00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
20b10 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69  t trigger associ
20b20 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61  ated with the ta
20b30 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ble */.};../*.**
20b40 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69   A trigger is ei
20b50 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72  ther a BEFORE or
20b60 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65   an AFTER trigge
20b70 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  r.  The followin
20b80 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64  g constants.** d
20b90 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a  etermine which..
20ba0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61  **.** If there a
20bb0 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67  re multiple trig
20bc0 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20  gers, you might 
20bd0 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61  of some BEFORE a
20be0 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a  nd some AFTER..*
20bf0 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c  * In that cases,
20c00 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62   the constants b
20c10 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64  elow can be ORed
20c20 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64   together..*/.#d
20c30 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45  efine TRIGGER_BE
20c40 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20  FORE  1.#define 
20c50 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20  TRIGGER_AFTER   
20c60 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74  2../*. * An inst
20c70 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54  ance of struct T
20c80 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73  riggerStep is us
20c90 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69  ed to store a si
20ca0 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65  ngle SQL stateme
20cb0 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20  nt. * that is a 
20cc0 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65  part of a trigge
20cd0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
20ce0 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   Instances of st
20cf0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
20d00 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
20d10 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c   singly linked l
20d20 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75  ist (linked. * u
20d30 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22  sing the "pNext"
20d40 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e   member) referen
20d50 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70  ced by the "step
20d60 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66  _list" member of
20d70 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74   the. * associat
20d80 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
20d90 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
20da0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
20db0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
20dc0 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
20dd0 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
20de0 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
20df0 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d  . * The "op" mem
20e00 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68  ber indicates wh
20e10 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
20e20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52  "DELETE", "INSER
20e30 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a  T", "UPDATE" or.
20e40 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74   * "SELECT" stat
20e50 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69  ement. The meani
20e60 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72  ngs of the other
20e70 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65   members is dete
20e80 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a  rmined by the. *
20e90 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61   value of "op" a
20ea0 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a  s follows:. *. *
20eb0 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52   (op == TK_INSER
20ec0 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20  T). * orconf    
20ed0 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e  -> stores the ON
20ee0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
20ef0 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20  thm. * pSelect  
20f00 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
20f10 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
20f20 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61  . SELECT ... sta
20f30 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
20f50 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74  s stores a point
20f60 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54  er to the SELECT
20f70 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65   statement. Othe
20f80 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a  rwise NULL.. * z
20f90 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
20fa0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
20fb0 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
20fc0 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
20fd0 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
20fe0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
20ff0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
21000 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
21010 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
21020 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
21030 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
21040 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
21050 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
21060 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
21070 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21080 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
21090 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20  ) VALUES .... * 
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
210b0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69  tement, then thi
210c0 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c  s stores the col
210d0 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a  umn-names to be.
210e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
210f0 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20  inserted into.. 
21100 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44  *. * (op == TK_D
21110 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  ELETE). * zTarge
21120 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
21130 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
21140 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
21150 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
21160 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
21170 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
21180 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
21190 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
211a0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
211b0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
211c0 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
211d0 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67  UPDATE). * zTarg
211e0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
211f0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
21200 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a  le to update.. *
21210 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
21220 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
21230 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61  f the UPDATE sta
21240 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
21250 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
21260 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
21270 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
21280 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69  ExprList -> A li
21290 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  st of the column
212a0 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20  s to update and 
212b0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20  the expressions 
212c0 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20  to update. *    
212d0 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74            them t
212e0 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70  o. See sqlite3Up
212f0 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61  date() documenta
21300 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65  tion of "pChange
21310 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  s". *           
21320 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a     argument.. *.
21330 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
21340 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
21350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21360 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
21370 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
21380 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
21390 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
213a0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
213b0 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
213c0 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
213d0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
213e0 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
213f0 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
21400 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
21410 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
21420 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
21430 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20  ement or RHS of 
21440 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45  INSERT INTO SELE
21450 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72  CT ... */.  char
21460 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20   *zTarget;      
21470 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65   /* Target table
21480 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44   for DELETE, UPD
21490 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20  ATE, INSERT */. 
214a0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
214b0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
214c0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45  RE clause for DE
214d0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73  LETE or UPDATE s
214e0 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  teps */.  ExprLi
214f0 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f  st *pExprList; /
21500 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72  * SET clause for
21510 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64   UPDATE. */.  Id
21520 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
21530 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
21540 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
21550 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
21560 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
21570 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74  in the link-list
21580 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65   */.  TriggerSte
21590 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61  p *pLast;  /* La
215a0 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69  st element in li
215b0 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66  nk-list. Valid f
215c0 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79  or 1st elem only
215d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
215e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
215f0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
21600 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
21610 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78  by the sqliteFix
21620 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20  ....** routines 
21630 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65  as they walk the
21640 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d   parse tree to m
21650 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66  ake database ref
21660 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69  erences.** expli
21670 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  cit..*/.typedef 
21680 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44  struct DbFixer D
21690 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44  bFixer;.struct D
216a0 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65  bFixer {.  Parse
216b0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f   *pParse;      /
216c0 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f  * The parsing co
216d0 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65  ntext.  Error me
216e0 73 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68  ssages written h
216f0 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ere */.  Schema 
21700 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20  *pSchema;    /* 
21710 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69  Fix items to thi
21720 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
21730 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20  t bVarOnly;     
21740 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76    /* Check for v
21750 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
21760 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e  es only */.  con
21770 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20  st char *zDb;   
21780 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
21790 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f  l objects are co
217a0 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20  ntained in this 
217b0 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f  database */.  co
217c0 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
217d0 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65    /* Type of the
217e0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
217f0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
21800 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ages */.  const 
21810 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a  Token *pName; /*
21820 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
21830 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
21840 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
21850 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
21860 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74   objected used t
21870 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65  o accumulate the
21880 20 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e   text of a strin
21890 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f  g where we.** do
218a0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79   not necessarily
218b0 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68   know how big th
218c0 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65  e string will be
218d0 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   in the end..*/.
218e0 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
218f0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
21900 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69           /* Opti
21910 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f  onal database fo
21920 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61  r lookaside.  Ca
21930 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  n be NULL */.  c
21940 68 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20  har *zBase;     
21950 20 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c      /* A base al
21960 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66  location.  Not f
21970 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20  rom malloc. */. 
21980 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
21990 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
219a0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
219b0 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
219c0 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
219d0 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
219e0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
219f0 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
21a00 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
21a10 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
21a20 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
21a30 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
21a40 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
21a50 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
21a60 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
21a70 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
21a80 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
21a90 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
21aa0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
21ab0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
21ac0 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
21ad0 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
21ae0 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
21af0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
21b00 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
21b10 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
21b20 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
21b30 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21b40 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
21b50 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
21b60 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
21b70 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
21b80 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
21b90 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
21ba0 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
21bb0 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
21bc0 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
21bd0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
21be0 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
21bf0 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
21c00 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
21c10 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
21c20 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
21c30 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
21c40 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
21c50 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
21c60 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
21c70 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
21c80 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
21c90 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
21ca0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
21cb0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
21cc0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
21cd0 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
21ce0 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
21cf0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
21d00 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
21d10 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
21d20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
21d30 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
21d40 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
21d50 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
21d60 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
21d70 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
21d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
21d90 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
21da0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
21db0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
21dc0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
21dd0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
21de0 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
21df0 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
21e00 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
21e10 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
21e20 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
21e30 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
21e40 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
21e50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
21e60 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
21e70 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
21e80 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
21e90 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
21ea0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
21eb0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
21ec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
21ed0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
21ee0 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
21ef0 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f10 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
21f20 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
21f30 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
21f40 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
21f50 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21f60 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
21f70 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
21f80 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
21f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21fa0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
21fb0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
21fc0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
21fd0 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21ff0 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
22000 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
22010 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  ans */.  int mxS
22020 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
22030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
22040 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
22050 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
22060 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
22070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
22080 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
22090 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
220a0 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
220b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
220c0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
220d0 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
220e0 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
220f0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
22100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
22110 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
22120 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
22130 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
22140 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
22150 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
22160 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
22170 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
22180 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
22190 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
221a0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
221b0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
221c0 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
221d0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
221e0 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
221f0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
22200 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
22210 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
22220 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
22230 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
22240 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
22250 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
22260 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22280 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
22290 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
222a0 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
222c0 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
222d0 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
222e0 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
222f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
22300 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
22310 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
22320 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
22330 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
22340 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
22350 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
22360 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
22370 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
22380 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22390 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
223a0 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
223b0 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
223c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
223d0 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
223e0 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
22410 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
22420 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
22430 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
22440 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
22450 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
22460 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
22470 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22490 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
224a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
224b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
224c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
224d0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
224e0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
224f0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
22520 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
22530 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
22540 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
22550 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
22560 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
22570 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
22580 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
22590 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
225a0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
225b0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
225c0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
225d0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
225f0 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
22600 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
22610 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
22620 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
22630 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
22640 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
22650 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
22660 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
22670 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
22680 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
22690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226a0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
226b0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
226c0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
226d0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226f0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
22700 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
22710 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
22720 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
22730 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22740 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
22750 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
22760 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
22770 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22790 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
227a0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
227b0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
227c0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
227d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
227e0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
227f0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
22800 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
22810 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
22820 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
22830 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
22840 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
22850 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
22860 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
22870 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
22880 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
22890 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
228a0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
228b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
228c0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
228d0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
228e0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
22910 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
22920 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
22930 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
22940 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
22950 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
22960 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
22970 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
22980 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
22990 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
229a0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
229b0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
229c0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
229d0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
229e0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
229f0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
22a00 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
22a10 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
22a20 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
22a30 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
22a40 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
22a50 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
22a60 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
22a70 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
22a80 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
22a90 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
22ad0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
22ae0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
22af0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69  BUILTIN_TEST.  i
22b00 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
22b10 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
22b20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
22b30 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
22b40 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
22b50 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
22b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
22b70 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
22b80 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
22b90 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52   */.  int iOnceR
22ba0 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20  esetThreshold;  
22bb0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
22bc0 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65  to reset OP_Once
22bd0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a   counters */.};.
22be0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
22bf0 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
22c00 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
22c10 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
22c20 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
22c30 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
22c40 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
22c50 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
22c60 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
22c70 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
22c80 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
22c90 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
22ca0 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
22cb0 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
22cc0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
22cd0 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
22ce0 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
22cf0 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
22d00 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
22d10 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
22d20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
22d30 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
22d40 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
22d50 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
22d60 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
22d70 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
22d80 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
22d90 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
22da0 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
22db0 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
22dc0 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
22dd0 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
22de0 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
22df0 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
22e00 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
22e10 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
22e20 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
22e30 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
22e40 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
22e50 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
22e60 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
22e70 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
22e80 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
22e90 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
22ea0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
22ed0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
22ee0 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
22ef0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
22f00 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
22f10 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
22f20 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
22f30 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
22f40 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
22f50 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
22f60 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
22f70 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
22f80 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
22f90 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
22fa0 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
22fb0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
22fc0 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
22fd0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22ff0 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
23000 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
23010 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
23040 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
23050 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23080 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
23090 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
230a0 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
230d0 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  ing context */. 
230e0 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20     int n;       
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23110 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
23120 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23150 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
23160 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
23170 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
23180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23190 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
231a0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
231b0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
231c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
231d0 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
231e0 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
231f0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43   */.    struct C
23200 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69  CurHint *pCCurHi
23210 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
23220 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f     /* Used by co
23230 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a  deCursorHint() *
23240 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
23250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23270 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c   /* array of col
23280 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20  umn indexes */. 
23290 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76     struct IdxCov
232a0 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20  er *pIdxCover;  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
232c0 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78   Check for index
232d0 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 7d   coverage */.  }
232e0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
232f0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
23300 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
23310 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
23320 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23330 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
23340 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
23350 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23360 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
23370 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23380 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
23390 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
233a0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
233b0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
233c0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
233d0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
233e0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
233f0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
23400 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
23410 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
23420 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
23430 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
23440 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
23450 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
23460 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
23470 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
23480 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
23490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
234a0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
234b0 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
234c0 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
234d0 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
234e0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
234f0 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
23500 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
23510 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
23520 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23530 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
23540 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
23550 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
23560 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
23570 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
23580 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
23590 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
235a0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
235b0 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
235e0 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
235f0 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
23600 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
23630 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
23640 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
23650 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
23660 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
23670 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
23680 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
23690 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
236a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
236b0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
236c0 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
236d0 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
236e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
236f0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
23700 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
23710 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
23720 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
23730 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23740 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
23750 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
23760 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
23770 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20  r *zCteErr;     
23780 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
23790 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
237a0 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
237b0 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
237c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
237d0 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
237e0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
237f0 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
23800 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
23810 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
23820 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
23830 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
23840 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
23850 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
23860 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
23870 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
23880 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
23890 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
238a0 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
238b0 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
238c0 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
238d0 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
238e0 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
238f0 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
23900 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
23910 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
23920 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
23930 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
23940 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
23950 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
23960 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
23970 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
23980 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
23990 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
239a0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
239b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
239c0 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
239d0 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
239e0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
239f0 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
23a00 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
23a30 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
23a40 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
23a60 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
23aa0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
23ab0 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
23ac0 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
23ad0 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
23ae0 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
23af0 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
23b00 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
23b10 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
23b20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
23b30 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
23b40 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
23b50 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
23b60 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
23b70 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
23b80 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
23b90 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
23ba0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
23bb0 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
23bc0 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
23bd0 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
23be0 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
23bf0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
23c00 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
23c10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
23c20 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
23c30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
23c40 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
23c50 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
23c60 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
23c70 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
23c80 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
23c90 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
23ca0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
23cb0 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
23cc0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
23cd0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
23ce0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23cf0 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  UG.  int sqlite3
23d00 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  NomemError(int);
23d10 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f  .  int sqlite3Io
23d20 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  errnomemError(in
23d30 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  t);.# define SQL
23d40 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ITE_NOMEM_BKPT s
23d50 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
23d60 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
23d70 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
23d80 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
23d90 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
23da0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6c  or(__LINE__).#el
23db0 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
23dc0 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51  TE_NOMEM_BKPT SQ
23dd0 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66  LITE_NOMEM.# def
23de0 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
23df0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49  _NOMEM_BKPT SQLI
23e00 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23  TE_IOERR_NOMEM.#
23e10 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53  endif../*.** FTS
23e20 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68 20  3 and FTS4 both 
23e30 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c 20  require virtual 
23e40 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f  table support.*/
23e50 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
23e60 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
23e70 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20 53  TABLE).# undef S
23e80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
23e90 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  3.# undef SQLITE
23ea0 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e  _ENABLE_FTS4.#en
23eb0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20  dif../*.** FTS4 
23ec0 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78 74  is really an ext
23ed0 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e  ension for FTS3.
23ee0 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64 20    It is enabled 
23ef0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c  using the.** SQL
23f00 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
23f10 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20 61  macro.  But to a
23f20 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77  void confusion w
23f30 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74  e also call.** t
23f40 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
23f50 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
23f60 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61 73  erve as an alias
23f70 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41 42   for SQLITE_ENAB
23f80 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20  LE_FTS3..*/.#if 
23f90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
23fa0 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20 21  NABLE_FTS4) && !
23fb0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
23fc0 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64 65  NABLE_FTS3).# de
23fd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
23fe0 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69 66  LE_FTS3 1.#endif
23ff0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70  ../*.** The ctyp
24000 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65  e.h header is ne
24010 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43  eded for non-ASC
24020 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20  II systems.  It 
24030 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65  is also.** neede
24040 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46  d by FTS3 when F
24050 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20  TS3 is included 
24060 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74  in the amalgamat
24070 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ion..*/.#if !def
24080 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49  ined(SQLITE_ASCI
24090 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  I) || \.    (def
240a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
240b0 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69  LE_FTS3) && defi
240c0 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47  ned(SQLITE_AMALG
240d0 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c  AMATION)).# incl
240e0 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65  ude <ctype.h>.#e
240f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
24100 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
24110 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64   mimic the stand
24120 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63  ard library func
24130 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c  tions toupper(),
24140 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69  .** isspace(), i
24150 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69  salnum(), isdigi
24160 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74  t() and isxdigit
24170 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  (), respectively
24180 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20  . The.** sqlite 
24190 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f  versions only wo
241a0 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61  rk for ASCII cha
241b0 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c  racters, regardl
241c0 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a  ess of locale..*
241d0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
241e0 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73  ASCII.# define s
241f0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
24200 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33    ((x)&~(sqlite3
24210 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
24220 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32  ed char)(x)]&0x2
24230 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  0)).# define sql
24240 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
24250 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24260 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24270 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65  )(x)]&0x01).# de
24280 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
24290 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65  num(x)   (sqlite
242a0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
242b0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
242c0 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  06).# define sql
242d0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
242e0 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
242f0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24300 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65  )(x)]&0x02).# de
24310 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
24320 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65  git(x)   (sqlite
24330 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24340 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24350 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  04).# define sql
24360 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
24370 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24380 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24390 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65  )(x)]&0x08).# de
243a0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
243b0 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65  wer(x)   (sqlite
243c0 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75  3UpperToLower[(u
243d0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
243e0 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  ]).# define sqli
243f0 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20  te3Isquote(x)   
24400 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
24410 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24420 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73 65  (x)]&0x80).#else
24430 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24440 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74 6f  3Toupper(x)   to
24450 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64 20  upper((unsigned 
24460 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
24470 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
24480 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28 28  e(x)   isspace((
24490 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
244a0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
244b0 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
244c0 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65  isalnum((unsigne
244d0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
244e0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
244f0 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68 61  pha(x)   isalpha
24500 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
24510 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
24520 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
24530 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69 67    isdigit((unsig
24540 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
24550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24560 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64 69  xdigit(x)  isxdi
24570 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
24580 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
24590 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28   sqlite3Tolower(
245a0 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e  x)   tolower((un
245b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
245c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
245d0 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 28  3Isquote(x)   ((
245e0 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c  x)=='"'||(x)=='\
245f0 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78  ''||(x)=='['||(x
24600 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a 23  )=='`').#endif.#
24610 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24620 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
24630 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69 74  _DIAGS.int sqlit
24640 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b 0a  e3IsIdChar(u8);.
24650 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e  #endif../*.** In
24660 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20  ternal function 
24670 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e  prototypes.*/.in
24680 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  t sqlite3StrICmp
24690 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
246a0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
246b0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63  qlite3Strlen30(c
246c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
246d0 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  r *sqlite3Column
246e0 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61  Type(Column*,cha
246f0 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c  r*);.#define sql
24700 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71 6c  ite3StrNICmp sql
24710 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69  ite3_strnicmp..i
24720 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
24730 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  Init(void);.void
24740 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e   sqlite3MallocEn
24750 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73  d(void);.void *s
24760 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34  qlite3Malloc(u64
24770 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
24780 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b  MallocZero(u64);
24790 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
247a0 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74  MallocZero(sqlit
247b0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
247c0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
247d0 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  Raw(sqlite3*, u6
247e0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
247f0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73  3DbMallocRawNN(s
24800 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63  qlite3*, u64);.c
24810 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
24820 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f  rDup(sqlite3*,co
24830 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
24840 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44   *sqlite3DbStrND
24850 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  up(sqlite3*,cons
24860 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76  t char*, u64);.v
24870 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c  oid *sqlite3Real
24880 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b  loc(void*, u64);
24890 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
248a0 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71  ReallocOrFree(sq
248b0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
248c0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
248d0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71  ite3DbRealloc(sq
248e0 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c  lite3 *, void *,
248f0 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u64);.void sqli
24900 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65  te3DbFree(sqlite
24910 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  3*, void*);.int 
24920 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
24930 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  e(void*);.int sq
24940 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a  lite3DbMallocSiz
24950 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
24960 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
24970 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69  3ScratchMalloc(i
24980 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
24990 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69  3ScratchFree(voi
249a0 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
249b0 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74  e3PageMalloc(int
249c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
249d0 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  ageFree(void*);.
249e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53  void sqlite3MemS
249f0 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b  etDefault(void);
24a00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
24a10 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
24a20 54 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  T.void sqlite3Be
24a30 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28  nignMallocHooks(
24a40 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20  void (*)(void), 
24a50 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b  void (*)(void));
24a60 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
24a70 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c  te3HeapNearlyFul
24a80 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20  l(void);../*.** 
24a90 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  On systems with 
24aa0 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63  ample stack spac
24ab0 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f  e and that suppo
24ac0 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b  rt alloca(), mak
24ad0 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f  e.** use of allo
24ae0 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73  ca() to obtain s
24af0 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61  pace for large a
24b00 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73  utomatic objects
24b10 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a  .  By default,.*
24b20 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  * obtain space f
24b30 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a  rom malloc()..**
24b40 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29  .** The alloca()
24b50 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72   routine never r
24b60 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68  eturns NULL.  Th
24b70 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f  is will cause co
24b80 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74  de paths.** that
24b90 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74   deal with sqlit
24ba0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66  e3StackAlloc() f
24bb0 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e  ailures to be un
24bc0 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69  reachable..*/.#i
24bd0 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f  fdef SQLITE_USE_
24be0 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20  ALLOCA.# define 
24bf0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
24c00 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f  cRaw(D,N)   allo
24c10 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  ca(N).# define s
24c20 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
24c30 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65  Zero(D,N)  memse
24c40 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20  t(alloca(N), 0, 
24c50 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
24c60 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
24c70 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
24c80 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
24c90 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c  ocRaw(D,N)   sql
24ca0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
24cb0 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
24cc0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
24cd0 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65  ero(D,N)  sqlite
24ce0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c  3DbMallocZero(D,
24cf0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
24d00 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50  te3StackFree(D,P
24d10 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  )       sqlite3D
24d20 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69  bFree(D,P).#endi
24d30 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  f../* Do not all
24d40 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20  ow both MEMSYS5 
24d50 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62  and MEMSYS3 to b
24d60 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68  e defined togeth
24d70 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20  er.  If they.** 
24d80 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d  are, disable MEM
24d90 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53  SYS3.*/.#ifdef S
24da0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
24db0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
24dc0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
24dd0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
24de0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64  sys5(void);.#und
24df0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24e00 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a  _MEMSYS3.#endif.
24e10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24e20 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e  ABLE_MEMSYS3.con
24e30 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  st sqlite3_mem_m
24e40 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d  ethods *sqlite3M
24e50 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69  emGetMemsys3(voi
24e60 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66  d);.#endif...#if
24e70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45  ndef SQLITE_MUTE
24e80 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33  X_OMIT.  sqlite3
24e90 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
24ea0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66  onst *sqlite3Def
24eb0 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b  aultMutex(void);
24ec0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
24ed0 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
24ee0 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78  sqlite3NoopMutex
24ef0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
24f00 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
24f10 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b  MutexAlloc(int);
24f20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
24f30 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20  texInit(void);. 
24f40 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
24f50 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64  xEnd(void);.#end
24f60 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
24f70 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
24f80 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
24f90 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50  QLITE_MUTEX_NOOP
24fa0 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
24fb0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f  MemoryBarrier(vo
24fc0 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  id);.#else.# def
24fd0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  ine sqlite3Memor
24fe0 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69  yBarrier().#endi
24ff0 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  f..sqlite3_int64
25000 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61   sqlite3StatusVa
25010 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  lue(int);.void s
25020 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69  qlite3StatusUp(i
25030 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
25040 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e  qlite3StatusDown
25050 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
25060 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69   sqlite3StatusHi
25070 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74  ghwater(int, int
25080 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f  );../* Access to
25090 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79   mutexes used by
250a0 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28   sqlite3_status(
250b0 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74  ) */.sqlite3_mut
250c0 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68  ex *sqlite3Pcach
250d0 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73  e1Mutex(void);.s
250e0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
250f0 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78  lite3MallocMutex
25100 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66  (void);..#ifndef
25110 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
25120 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e  ATING_POINT.  in
25130 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64  t sqlite3IsNaN(d
25140 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20  ouble);.#else.# 
25150 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25160 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66  NaN(X)  0.#endif
25170 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
25180 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
25190 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68  wing structure h
251a0 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  olds information
251b0 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75   about SQL.** fu
251c0 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74  nctions argument
251d0 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70  s that are the p
251e0 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65  arameters to the
251f0 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69   printf() functi
25200 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72  on..*/.struct Pr
25210 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a  intfArguments {.
25220 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20    int nArg;     
25230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
25240 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  tal number of ar
25250 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  guments */.  int
25260 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20   nUsed;         
25270 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
25280 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65  of arguments use
25290 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71  d so far */.  sq
252a0 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70  lite3_value **ap
252b0 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72  Arg;   /* The ar
252c0 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f  gument values */
252d0 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  .};..void sqlite
252e0 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
252f0 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  um*, const char*
25300 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64  , va_list);.void
25310 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
25320 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
25330 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
25340 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e  ar *sqlite3MPrin
25350 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  tf(sqlite3*,cons
25360 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
25370 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72  har *sqlite3VMPr
25380 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
25390 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
253a0 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  st);.#if defined
253b0 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
253c0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
253d0 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a  _HAVE_OS_TRACE).
253e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
253f0 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20  bugPrintf(const 
25400 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
25410 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
25420 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76  SQLITE_TEST).  v
25430 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74  oid *sqlite3Test
25440 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20  TextToPtr(const 
25450 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
25460 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25470 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64  TE_DEBUG).  void
25480 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
25490 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20  Expr(TreeView*, 
254a0 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29  const Expr*, u8)
254b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
254c0 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72  TreeViewBareExpr
254d0 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
254e0 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
254f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
25500 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
25510 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72  eViewExprList(Tr
25520 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45  eeView*, const E
25530 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f  xprList*, u8, co
25540 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
25550 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
25560 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65  ewSelect(TreeVie
25570 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74  w*, const Select
25580 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
25590 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69  qlite3TreeViewWi
255a0 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  th(TreeView*, co
255b0 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  nst With*, u8);.
255c0 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71  #endif...void sq
255d0 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63  lite3SetString(c
255e0 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a  har **, sqlite3*
255f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25600 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
25610 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rMsg(Parse*, con
25620 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25630 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75  void sqlite3Dequ
25640 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64  ote(char*);.void
25650 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69   sqlite3TokenIni
25660 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b  t(Token*,char*);
25670 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77  .int sqlite3Keyw
25680 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e  ordCode(const un
25690 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e  signed char*, in
256a0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  t);.int sqlite3R
256b0 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c  unParser(Parse*,
256c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68   const char*, ch
256d0 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ar **);.void sql
256e0 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67  ite3FinishCoding
256f0 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
25700 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28  lite3GetTempReg(
25710 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
25720 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
25730 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  Reg(Parse*,int);
25740 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
25750 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
25760 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25770 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e  e3ReleaseTempRan
25780 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
25790 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
257a0 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68  ClearTempRegCach
257b0 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65  e(Parse*);.#ifde
257c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
257d0 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70  nt sqlite3NoTemp
257e0 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  sInRange(Parse*,
257f0 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  int,int);.#endif
25800 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
25810 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
25820 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
25830 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
25840 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
25850 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
25860 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25870 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
25880 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
25890 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
258a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
258b0 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
258c0 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
258d0 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  onst Token*);.vo
258e0 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41  id sqlite3PExprA
258f0 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  ddSelect(Parse*,
25900 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29   Expr*, Select*)
25910 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
25920 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c  xprAnd(sqlite3*,
25930 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  Expr*, Expr*);.E
25940 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25950 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  Function(Parse*,
25960 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
25970 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25980 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
25990 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
259a0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
259b0 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
259c0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
259d0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
259e0 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
259f0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
25a00 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  t*,Expr*);.ExprL
25a10 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
25a20 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72  ListAppendVector
25a30 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
25a40 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29  *,IdList*,Expr*)
25a50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
25a60 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64  prListSetSortOrd
25a70 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  er(ExprList*,int
25a80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25a90 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
25aa0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
25ab0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
25ac0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
25ad0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
25ae0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
25af0 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
25b00 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
25b10 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
25b20 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  ist*);.u32 sqlit
25b30 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28  e3ExprListFlags(
25b40 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29  const ExprList*)
25b50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
25b60 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72  t(sqlite3*, char
25b70 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
25b80 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69  InitCallback(voi
25b90 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c  d*, int, char**,
25ba0 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73   char**);.void s
25bb0 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72  qlite3Pragma(Par
25bc0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
25bd0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
25be0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
25bf0 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
25c00 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29  ection(sqlite3*)
25c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25c20 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c  setOneSchema(sql
25c30 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
25c40 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65   sqlite3Collapse
25c50 44 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71  DatabaseArray(sq
25c60 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
25c70 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72  lite3CommitInter
25c80 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74  nalChanges(sqlit
25c90 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
25ca0 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61  e3DeleteColumnNa
25cb0 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62  mes(sqlite3*,Tab
25cc0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
25cd0 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72  3ColumnsFromExpr
25ce0 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72  List(Parse*,Expr
25cf0 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d  List*,i16*,Colum
25d00 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n**);.void sqlit
25d10 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d  e3SelectAddColum
25d20 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f  nTypeAndCollatio
25d30 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
25d40 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
25d50 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65  *sqlite3ResultSe
25d60 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a  tOfSelect(Parse*
25d70 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20  ,Select*);.void 
25d80 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65  sqlite3OpenMaste
25d90 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20  rTable(Parse *, 
25da0 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  int);.Index *sql
25db0 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
25dc0 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36  dex(Table*);.i16
25dd0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66   sqlite3ColumnOf
25de0 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31  Index(Index*, i1
25df0 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  6);.void sqlite3
25e00 53 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65  StartTable(Parse
25e10 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
25e20 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  int,int,int,int)
25e30 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41  ;.#if SQLITE_ENA
25e40 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
25e50 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NS.  void sqlite
25e60 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
25e70 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a  sFromName(Table*
25e80 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73  , Column*);.#els
25e90 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25ea0 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69  e3ColumnProperti
25eb0 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20  esFromName(T,C) 
25ec0 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
25ed0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
25ee0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  ddColumn(Parse*,
25ef0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Token*,Token*);.
25f00 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e  void sqlite3AddN
25f10 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69  otNull(Parse*, i
25f20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25f30 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50  3AddPrimaryKey(P
25f40 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
25f50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
25f60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
25f70 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74  dCheckConstraint
25f80 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
25f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
25fa0 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72  DefaultValue(Par
25fb0 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a  se*,ExprSpan*);.
25fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
25fd0 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65  ollateType(Parse
25fe0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
25ff0 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65   sqlite3EndTable
26000 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
26010 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a  oken*,u8,Select*
26020 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61  );.int sqlite3Pa
26030 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61  rseUri(const cha
26040 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75  r*,const char*,u
26050 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20  nsigned int*,.  
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c    sqlite3_vfs**,
26080 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b  char**,char **);
26090 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44  .Btree *sqlite3D
260a0 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c  bNameToBtree(sql
260b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
260c0 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
260d0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
260e0 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20 73 71  TEST.# define sq
260f0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29  lite3FaultSim(X)
26100 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65   SQLITE_OK.#else
26110 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61  .  int sqlite3Fa
26120 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e  ultSim(int);.#en
26130 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c  dif..Bitvec *sql
26140 69 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65  ite3BitvecCreate
26150 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (u32);.int sqlit
26160 65 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74  e3BitvecTest(Bit
26170 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
26180 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
26190 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a  tNotNull(Bitvec*
261a0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
261b0 74 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74  te3BitvecSet(Bit
261c0 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  vec*, u32);.void
261d0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c   sqlite3BitvecCl
261e0 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32  ear(Bitvec*, u32
261f0 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  , void*);.void s
26200 71 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74  qlite3BitvecDest
26210 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33  roy(Bitvec*);.u3
26220 32 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  2 sqlite3BitvecS
26230 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69  ize(Bitvec*);.#i
26240 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26250 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 69  T_BUILTIN_TEST.i
26260 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
26270 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
26280 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
26290 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
262a0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
262b0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
262c0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
262d0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
262e0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
262f0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
26300 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
26310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
26320 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
26330 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
26340 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
26350 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
26360 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
26370 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
26380 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
26390 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
263a0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
263b0 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
263c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
263d0 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
263e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
263f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
26400 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
26410 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
26420 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
26430 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26440 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
26450 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
26460 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
26470 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
26480 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
26490 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
264a0 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
264b0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
264c0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
264d0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
264e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
264f0 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
26500 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
26510 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26520 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
26530 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
26540 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26550 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
26560 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
26570 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
26580 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
26590 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
265a0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
265b0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
265c0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
265d0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
265e0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
265f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26600 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
26610 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
26620 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
26630 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
26640 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
26650 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
26660 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
26670 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
26680 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
26690 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
266a0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
266b0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
266c0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
266d0 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
266e0 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
266f0 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
26700 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
26710 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
26720 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
26730 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
26740 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
26750 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
26760 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
26770 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
26780 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
26790 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
267a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
267b0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267e0 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
267f0 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
26800 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
26810 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
26820 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
26830 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
26840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26850 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
26860 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26870 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
26880 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
26890 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
268a0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
268b0 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
268c0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
268d0 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
268e0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
268f0 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
26900 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
26910 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
26920 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
26930 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
26940 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
26950 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
26960 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
26970 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
26980 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
26990 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
269a0 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
269b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
269c0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
269d0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
269e0 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
269f0 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
26a20 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
26a30 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
26a40 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
26a50 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
26a60 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
26a70 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
26a80 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
26a90 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
26aa0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
26ab0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
26ac0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ae0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
26af0 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
26b00 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
26b10 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
26b20 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
26b30 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
26b40 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
26b50 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
26b60 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26b70 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
26b80 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26b90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
26ba0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
26bb0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
26bc0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
26bd0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
26be0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
26bf0 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
26c00 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
26c10 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
26c20 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
26c30 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
26c40 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
26c50 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
26c60 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
26c70 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26c80 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
26c90 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
26ca0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
26cb0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
26cc0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
26cd0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
26ce0 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
26cf0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
26d00 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
26d10 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
26d20 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
26d30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26d40 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
26d50 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
26d60 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
26d70 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
26d80 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
26d90 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
26da0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
26db0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
26dc0 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
26dd0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
26de0 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65  WhereOrderedInne
26df0 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a  rLoop(WhereInfo*
26e00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
26e10 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
26e20 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
26e30 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
26e40 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
26e50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
26e60 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
26e70 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
26e80 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
26e90 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
26ea0 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
26eb0 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
26ec0 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
26ed0 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
26ee0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
26ef0 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
26f00 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
26f10 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
26f20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
26f30 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
26f40 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
26f50 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
26f60 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
26f70 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
26f80 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
26f90 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
26fa0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
26fb0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
26fc0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
26fd0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
26fe0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
26ff0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
27000 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
27010 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
27020 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
27030 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27040 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27050 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27060 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
27070 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
27080 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27090 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
270a0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
270b0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
270c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
270d0 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
270e0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
270f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27100 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
27110 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
27120 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
27130 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27140 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
27150 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
27160 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27170 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
27180 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
27190 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
271a0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
271b0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
271c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
271d0 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
271e0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
271f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27200 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
27210 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
27220 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27230 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
27240 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27250 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27260 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
27270 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75  *, Expr*, int, u
27280 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
27290 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
272a0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
272b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
272c0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
272d0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
272e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
272f0 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
27300 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27320 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
27330 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
27340 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
27350 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
27360 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
27370 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
27380 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
27390 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
273a0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
273b0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
273c0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
273d0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
273e0 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
273f0 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
27400 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
27410 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
27420 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
27430 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
27440 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
27450 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
27460 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
27470 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
27480 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
27490 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
274a0 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
274b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
274c0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
274d0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
274e0 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
274f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
27500 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
27510 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
27520 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27530 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
27540 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
27550 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
27560 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
27570 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
27580 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
27590 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
275a0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
275b0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
275c0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
275d0 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
275e0 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
275f0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
27600 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
27610 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
27620 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
27630 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
27640 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
27650 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
27660 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
27670 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
27680 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
27690 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
276a0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
276b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
276c0 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
276d0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
276e0 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
276f0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
27700 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
27710 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
27720 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
27730 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27740 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
27750 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
27760 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
27770 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
27780 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
27790 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
277a0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
277b0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
277c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
277d0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
277e0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
277f0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
27800 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
27810 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
27820 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
27830 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27840 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
27850 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
27860 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
27870 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
27880 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
27890 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
278a0 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
278b0 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
278c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
278d0 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 76  T_BUILTIN_TEST.v
278e0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
278f0 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
27900 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
27910 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
27920 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
27930 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
27940 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
27950 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
27960 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
27970 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
27980 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
27990 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
279a0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
279b0 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
279c0 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
279d0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
279e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
279f0 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f  CommitTransactio
27a00 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  n(Parse*);.void 
27a10 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54  sqlite3RollbackT
27a20 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
27a30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27a40 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
27a50 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
27a60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
27a70 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
27a80 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
27a90 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
27aa0 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
27ab0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
27ac0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
27ad0 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
27ae0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
27af0 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
27b00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27b10 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
27b20 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
27b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27b40 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
27b50 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
27b60 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
27b70 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
27b80 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27b90 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
27ba0 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
27bb0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
27bc0 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
27bd0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
27be0 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
27bf0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
27c00 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
27c10 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
27c20 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
27c30 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
27c40 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
27c50 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
27c60 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
27c70 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
27c80 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
27c90 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
27ca0 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
27cb0 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
27cc0 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
27cd0 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
27ce0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27cf0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
27d00 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
27d10 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
27d20 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
27d30 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
27d40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27d50 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
27d60 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
27d70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
27d80 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
27d90 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
27da0 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
27db0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
27df0 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
27e00 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
27e10 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
27e20 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
27e30 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
27e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
27e50 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
27e60 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27e70 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
27e80 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
27e90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
27ea0 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
27eb0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
27ec0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27ed0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
27ee0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27ef0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
27f00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
27f10 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
27f20 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
27f30 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
27f40 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
27f50 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
27f60 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
27f70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
27f80 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
27f90 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
27fa0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
27fb0 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
27fc0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
27fd0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
27fe0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
27ff0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
28000 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
28010 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
28020 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
28030 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
28040 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
28050 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
28060 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
28070 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
28080 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
28090 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  );.#if SELECTTRA
280a0 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20  CE_ENABLED.void 
280b0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
280c0 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e  Name(Select*,con
280d0 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  st char*);.#else
280e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
280f0 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41  3SelectSetName(A
28100 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
28110 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69  sqlite3InsertBui
28120 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65  ltinFuncs(FuncDe
28130 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66  f*,int);.FuncDef
28140 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e   *sqlite3FindFun
28150 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63  ction(sqlite3*,c
28160 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75  onst char*,int,u
28170 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
28180 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
28190 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  inFunctions(void
281a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
281b0 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
281c0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
281d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
281e0 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f  sterPerConnectio
281f0 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  nBuiltinFunction
28200 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  s(sqlite3*);.int
28210 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
28220 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  eckOk(sqlite3*);
28230 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
28240 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28  tyCheckSickOrOk(
28250 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28260 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f  sqlite3ChangeCoo
28270 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  kie(Parse*, int)
28280 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
28290 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
282a0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
282b0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
282c0 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  R).void sqlite3M
282d0 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50  aterializeView(P
282e0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
282f0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  xpr*, int);.#end
28300 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
28310 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
28320 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
28330 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65  ginTrigger(Parse
28340 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  *, Token*,Token*
28350 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a  ,int,int,IdList*
28360 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ,SrcList*,.     
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c        Expr*,int,
28390 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
283a0 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67  lite3FinishTrigg
283b0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
283c0 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29  erStep*, Token*)
283d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
283e0 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73  DropTrigger(Pars
283f0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
28400 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
28410 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
28420 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
28430 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  *);.  Trigger *s
28440 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
28450 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
28460 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  le*, int, ExprLi
28470 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29  st*, int *pMask)
28480 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
28490 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
284a0 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a  Parse *, Table *
284b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
284c0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
284d0 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20  Parse*, Trigger 
284e0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
284f0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c  *, int, Table *,
28500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
28520 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
28530 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52  oid sqlite3CodeR
28540 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
28550 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72  Parse *, Trigger
28560 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
28570 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  , int, int);.  v
28580 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72  oid sqliteViewTr
28590 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54  iggers(Parse*, T
285a0 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
285b0 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20  t, ExprList*);. 
285c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
285d0 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73  eteTriggerStep(s
285e0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
285f0 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65  Step*);.  Trigge
28600 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
28610 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28  iggerSelectStep(
28620 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
28630 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
28640 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
28650 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74  InsertStep(sqlit
28660 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69  e3*,Token*, IdLi
28670 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
28680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c               Sel
286a0 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67  ect*,u8);.  Trig
286b0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
286c0 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65  TriggerUpdateSte
286d0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
286e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  *,ExprList*, Exp
286f0 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67  r*, u8);.  Trigg
28700 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
28710 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70  riggerDeleteStep
28720 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
28730 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
28740 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
28750 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20  igger(sqlite3*, 
28760 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69  Trigger*);.  voi
28770 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
28780 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
28790 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
287a0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32  st char*);.  u32
287b0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
287c0 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72  olmask(Parse*,Tr
287d0 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a  igger*,ExprList*
287e0 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c  ,int,int,Table*,
287f0 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73  int);.# define s
28800 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65  qlite3ParseTople
28810 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f  vel(p) ((p)->pTo
28820 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54  plevel ? (p)->pT
28830 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23  oplevel : (p)).#
28840 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
28850 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  sToplevel(p) ((p
28860 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29  )->pToplevel==0)
28870 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28880 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
28890 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
288a0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
288b0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
288c0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
288d0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
288e0 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
288f0 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
28900 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
28910 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
28920 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
28930 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
28940 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
28950 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
28960 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
28970 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
28980 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
28990 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
289a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
289b0 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
289c0 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
289d0 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
289e0 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
289f0 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
28a00 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
28a10 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
28a20 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
28a30 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
28a40 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
28a50 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
28a60 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
28a70 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
28a80 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
28a90 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28aa0 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
28ab0 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
28ac0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
28ad0 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
28ae0 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
28af0 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
28b00 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
28b10 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
28b20 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
28b30 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
28b40 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
28b50 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28b60 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
28b70 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
28b80 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
28b90 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
28ba0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
28bb0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
28bc0 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
28bd0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
28be0 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
28bf0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
28c00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
28c10 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
28c20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
28c30 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
28c40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
28c50 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
28c60 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
28c70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28c80 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
28c90 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
28ca0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
28cb0 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
28cc0 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
28cd0 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
28ce0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28cf0 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
28d00 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
28d10 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
28d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
28d30 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
28d40 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
28d50 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
28d60 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28d70 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
28d80 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
28d90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
28da0 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
28db0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
28dc0 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
28dd0 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
28de0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
28df0 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
28e00 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
28e10 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
28e20 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
28e30 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
28e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
28e50 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
28e60 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
28e70 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
28e80 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
28e90 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
28ea0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
28eb0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
28ec0 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
28ed0 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
28ee0 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
28ef0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
28f00 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
28f10 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
28f20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
28f30 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
28f40 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
28f50 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
28f60 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
28f70 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
28f80 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
28f90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28fa0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
28fb0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
28fc0 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
28fd0 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  le);.#endif.#if 
28fe0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
28ff0 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
29000 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20  TATUS) || \.    
29010 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
29020 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
29030 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64  TAT4) || \.    d
29040 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58  efined(SQLITE_EX
29050 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f  PLAIN_ESTIMATED_
29060 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65  ROWS).u64 sqlite
29070 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
29080 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  Est);.#endif../*
29090 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
290a0 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
290b0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
290c0 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
290d0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
290e0 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
290f0 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
29100 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
29110 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
29120 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
29130 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
29140 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
29150 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
29160 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
29170 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
29180 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
29190 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
291a0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
291b0 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
291c0 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
291d0 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
291e0 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
291f0 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
29200 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
29210 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
29220 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
29230 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
29240 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
29250 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
29260 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
29270 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
29280 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
29290 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
292a0 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
292b0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
292c0 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
292d0 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
292e0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
292f0 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
29300 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
29310 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
29320 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
29330 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
29340 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
29350 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
29360 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
29370 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
29380 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
29390 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
293a0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
293b0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
293c0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
293d0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
293e0 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
293f0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
29400 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
29410 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
29420 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
29430 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
29440 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
29450 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
29460 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
29470 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
29480 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
29490 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
294a0 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
294b0 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
294c0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
294d0 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
294e0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
294f0 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
29500 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
29510 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
29520 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
29530 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
29540 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
29550 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
29560 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
29570 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
29580 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
29590 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
295a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
295b0 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
295c0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
295d0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
295e0 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
295f0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
29600 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
29610 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
29620 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
29630 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
29640 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
29650 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
29660 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29670 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
29680 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
29690 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
296a0 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
296b0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
296c0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
296d0 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
296e0 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
296f0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
29700 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
29710 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
29720 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
29730 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
29740 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
29750 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
29760 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
29770 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
29780 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
29790 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
297a0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
297b0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
297c0 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
297d0 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
297e0 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
297f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29800 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
29810 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
29820 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
29830 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29840 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
29850 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
29860 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
29870 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
29880 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
29890 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
298a0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
298b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
298c0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
298d0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
298e0 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
298f0 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
29900 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
29910 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
29920 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
29930 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
29940 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
29950 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
29960 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
29970 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
29980 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
29990 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
299a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
299b0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
299c0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
299d0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
299e0 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
299f0 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
29a00 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
29a10 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
29a20 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
29a30 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
29a40 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
29a50 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
29a60 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
29a70 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
29a80 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
29a90 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,u8,.           
29aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
29ab0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
29ac0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
29ad0 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
29ae0 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
29af0 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
29b00 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
29b10 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
29b20 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
29b30 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
29b40 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
29b50 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
29b60 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
29b70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
29b80 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
29b90 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
29ba0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
29bb0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
29bc0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
29bd0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
29be0 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
29bf0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29c00 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
29c10 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
29c20 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
29c30 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
29c40 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
29c50 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
29c60 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
29c70 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
29c80 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
29c90 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
29ca0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
29cb0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
29cc0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
29cd0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
29ce0 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
29cf0 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
29d00 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
29d10 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
29d20 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
29d30 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
29d40 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
29d50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29d60 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
29d70 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
29d80 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
29d90 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
29da0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
29db0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
29dc0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
29dd0 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
29de0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
29df0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
29e00 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
29e10 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
29e20 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
29e30 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
29e40 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
29e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
29e60 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
29e70 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
29e80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29e90 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
29ea0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
29eb0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
29ec0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
29ed0 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
29ee0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
29ef0 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
29f00 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20  Parse*, Expr *, 
29f10 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29f20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
29f30 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
29f40 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
29f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
29f60 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
29f70 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
29f80 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
29f90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
29fa0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
29fb0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
29fc0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
29fd0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29fe0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
29ff0 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
2a000 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2a010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2a020 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
2a030 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2a040 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
2a050 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2a060 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
2a070 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2a080 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2a090 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2a0a0 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2a0b0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2a0c0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2a0d0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2a0e0 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2a0f0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2a100 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2a110 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a120 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2a130 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2a140 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2a150 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2a160 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2a170 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2a180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a190 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2a1a0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2a1b0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
2a1c0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2a1d0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2a1e0 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2a1f0 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2a200 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2a210 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
2a220 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a230 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2a240 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2a250 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2a260 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2a270 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
2a280 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2a290 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2a2a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2a2b0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2a2c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2a2d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2a2e0 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2a2f0 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2a300 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2a310 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2a320 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2a330 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2a340 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2a350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2a360 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2a370 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2a380 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2a390 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2a3a0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2a3b0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2a3c0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2a3d0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2a3e0 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2a3f0 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2a400 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2a410 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2a420 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2a430 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2a440 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2a450 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2a460 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2a470 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2a480 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2a490 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2a4a0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2a4b0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2a4c0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2a4d0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2a4e0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2a4f0 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2a500 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2a510 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2a520 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2a530 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2a540 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2a550 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2a560 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2a570 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2a580 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2a590 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2a5a0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2a5b0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2a5c0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
2a5d0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2a5e0 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
2a5f0 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2a600 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2a610 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
2a620 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2a630 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
2a640 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2a650 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
2a660 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
2a670 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2a680 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
2a690 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
2a6a0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
2a6b0 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
2a6c0 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
2a6d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a6e0 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
2a6f0 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
2a700 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
2a710 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2a720 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
2a730 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
2a740 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2a750 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
2a760 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b  ccum*,int,char);
2a770 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2a780 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2a790 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2a7a0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
2a7b0 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
2a7c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2a7d0 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
2a7e0 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
2a7f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
2a800 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
2a810 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
2a820 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
2a830 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2a840 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
2a850 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
2a860 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
2a870 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
2a880 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
2a890 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e  nst u8 *);..#ifn
2a8a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2a8b0 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c  SUBQUERY.int sql
2a8c0 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2a8d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2a8e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a8f0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2a900 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b  N(x,y) SQLITE_OK
2a910 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2a920 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2a930 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
2a940 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2a950 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2a960 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2a970 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a  4ProbeSetValue(.
2a980 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78      Parse*,Index
2a990 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
2a9a0 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74  **,Expr*,int,int
2a9b0 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2a9c0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
2a9d0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
2a9e0 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
2a9f0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
2aa00 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2aa10 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
2aa20 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
2aa30 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
2aa40 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
2aa50 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
2aa60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2aa70 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e  ;.char sqlite3In
2aa80 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  dexColumnAffinit
2aa90 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  y(sqlite3*, Inde
2aaa0 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  x*, int);.#endif
2aab0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2aac0 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
2aad0 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
2aae0 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
2aaf0 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
2ab00 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
2ab10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2ab20 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2ab30 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2ab40 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2ab50 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
2ab60 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
2ab70 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
2ab80 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
2ab90 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
2aba0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
2abb0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
2abc0 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
2abd0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2abe0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2abf0 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
2ac00 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2ac10 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2ac20 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
2ac30 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2ac40 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
2ac50 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
2ac60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ac70 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
2ac80 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
2ac90 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
2aca0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
2acb0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
2acc0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2acd0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
2ace0 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
2acf0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2ad00 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
2ad10 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
2ad20 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
2ad30 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2ad40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2ad50 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
2ad60 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
2ad70 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2ad80 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
2ad90 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2ada0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
2adb0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
2adc0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2add0 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
2ade0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2adf0 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
2ae00 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2ae10 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
2ae20 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
2ae30 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2ae40 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2ae50 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
2ae60 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2ae70 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
2ae80 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2ae90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
2aea0 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
2aeb0 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
2aec0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2aed0 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
2aee0 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
2aef0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2af00 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
2af10 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
2af20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
2af30 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
2af40 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
2af50 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2af60 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
2af70 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
2af80 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2af90 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
2afa0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2afb0 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
2afc0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2afd0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
2afe0 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2aff0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2b000 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
2b010 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2b020 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
2b030 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
2b040 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
2b050 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2b060 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
2b070 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
2b080 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
2b090 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
2b0a0 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65 66   Table*);.#  def
2b0b0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
2b0c0 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
2b0d0 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
2b0e0 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
2b0f0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2b100 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2b110 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
2b120 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2b130 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2b140 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
2b150 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
2b160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2b170 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
2b180 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
2b190 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
2b1a0 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
2b1b0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2b1c0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
2b1d0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
2b1e0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
2b1f0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2b200 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
2b210 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
2b220 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2b230 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
2b240 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2b250 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2b260 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
2b270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2b280 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
2b290 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
2b2a0 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
2b2b0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2b2c0 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2b2d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2b2e0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2b2f0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
2b300 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
2b310 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
2b320 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
2b330 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
2b340 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
2b350 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
2b360 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b370 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
2b380 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2b390 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2b3a0 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
2b3b0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2b3c0 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2b3d0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2b3e0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2b3f0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2b400 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2b410 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b420 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2b430 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2b440 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2b450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b460 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2b470 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2b480 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2b490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2b4a0 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2b4b0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2b4c0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2b4d0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2b4e0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2b4f0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2b500 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2b510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2b520 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2b530 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2b540 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2b550 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2b560 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2b570 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2b580 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2b590 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2b5a0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2b5b0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2b5c0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2b5d0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2b5e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2b5f0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2b600 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2b610 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2b620 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2b630 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2b640 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2b650 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2b660 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2b670 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2b680 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2b690 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2b6a0 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2b6b0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2b6c0 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2b6d0 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2b6e0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2b6f0 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
2b700 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
2b710 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
2b720 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
2b730 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
2b740 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
2b750 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
2b760 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
2b770 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
2b780 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
2b790 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
2b7a0 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
2b7b0 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
2b7c0 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
2b7d0 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
2b7e0 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
2b7f0 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
2b800 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
2b810 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
2b820 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
2b830 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
2b840 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70  ionality is.** p
2b850 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
2b860 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
2b870 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
2b880 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
2b890 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
2b8a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2b8b0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2b8c0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
2b8d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2b8e0 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
2b8f0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
2b900 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2b910 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2b920 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2b930 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
2b940 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
2b950 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
2b960 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
2b970 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2b980 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2b990 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
2b9a0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2b9b0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
2b9c0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2b9d0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
2b9e0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
2b9f0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
2ba00 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2ba10 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
2ba20 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2ba30 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
2ba40 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2ba50 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
2ba60 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
2ba70 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ba80 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
2ba90 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
2baa0 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
2bab0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
2bac0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2bad0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
2bae0 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
2baf0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bb00 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
2bb10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2bb20 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
2bb30 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
2bb40 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2bb50 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
2bb60 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
2bb70 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
2bb80 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2bb90 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
2bba0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2bbb0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
2bbc0 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
2bbd0 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
2bbe0 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
2bbf0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
2bc00 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
2bc10 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
2bc20 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2bc30 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
2bc40 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
2bc50 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
2bc60 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
2bc70 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2bc80 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
2bc90 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
2bca0 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
2bcb0 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
2bcc0 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
2bcd0 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
2bce0 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
2bcf0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
2bd00 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
2bd10 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2bd20 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
2bd30 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
2bd40 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
2bd50 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
2bd60 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
2bd70 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
2bd80 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2bd90 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
2bda0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
2bdb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
2bdc0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
2bdd0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
2bde0 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75  owed return valu
2bdf0 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46  es from sqlite3F
2be00 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a  indInIndex().*/.
2be10 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2be20 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20  _ROWID        1 
2be30 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20    /* Search the 
2be40 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2be50 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  le */.#define IN
2be60 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
2be70 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63      2   /* Searc
2be80 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62  h an ephemeral b
2be90 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65  -tree */.#define
2bea0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2beb0 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78  ASC    3   /* Ex
2bec0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43  isting index ASC
2bed0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2bee0 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2bef0 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45  _DESC   4   /* E
2bf00 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45  xisting index DE
2bf10 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
2bf20 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2bf30 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a  P         5   /*
2bf40 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61   No table availa
2bf50 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69  ble. Use compari
2bf60 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c  sons */./*.** Al
2bf70 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20  lowed flags for 
2bf80 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65  the 3rd paramete
2bf90 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64  r to sqlite3Find
2bfa0 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64  InIndex()..*/.#d
2bfb0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2bfc0 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30  OOP_OK     0x000
2bfd0 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75  1  /* OK to retu
2bfe0 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  rn IN_INDEX_NOOP
2bff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2c000 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20  NDEX_MEMBERSHIP 
2c010 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f   0x0002  /* IN o
2c020 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72  perator used for
2c030 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74   membership test
2c040 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2c050 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20  NDEX_LOOP       
2c060 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f   0x0004  /* IN o
2c070 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20  perator used as 
2c080 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71  a loop */.int sq
2c090 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2c0a0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
2c0b0 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u32, int*, int
2c0c0 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  *);..int sqlite3
2c0d0 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2c0e0 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74  te3_vfs *, const
2c0f0 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33   char *, sqlite3
2c100 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  _file *, int, in
2c110 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  t);.int sqlite3J
2c120 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
2c130 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65  e3_vfs *);.#ifde
2c140 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c150 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69  ATOMIC_WRITE.  i
2c160 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2c170 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f  lCreate(sqlite3_
2c180 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  file *);.#endif.
2c190 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2c1a0 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71  nalIsInMemory(sq
2c1b0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a  lite3_file *p);.
2c1c0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
2c1d0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2c1e0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69  e3_file *);..voi
2c1f0 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74  d sqlite3ExprSet
2c200 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50  HeightAndFlags(P
2c210 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2c220 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49  pr *p);.#if SQLI
2c230 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
2c240 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  H>0.  int sqlite
2c250 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2c260 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
2c270 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
2c280 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
2c290 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
2c2a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
2c2b0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2c2c0 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73  x) 0.  #define s
2c2d0 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2c2e0 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69  eight(x,y).#endi
2c2f0 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65  f..u32 sqlite3Ge
2c300 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a  t4byte(const u8*
2c310 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2c320 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32  ut4byte(u8*, u32
2c330 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2c340 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
2c350 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71  NOTIFY.  void sq
2c360 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2c370 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2c380 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20  , sqlite3 *);.  
2c390 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2c3a0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73  ectionUnlocked(s
2c3b0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76  qlite3 *db);.  v
2c3c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2c3d0 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69  ctionClosed(sqli
2c3e0 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a  te3 *db);.#else.
2c3f0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c400 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2c410 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ed(x,y).  #defin
2c420 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2c430 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20  ionUnlocked(x). 
2c440 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c450 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64  ConnectionClosed
2c460 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  (x).#endif..#ifd
2c470 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2c480 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2c490 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c  rserTrace(FILE*,
2c4a0 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66   char *);.#endif
2c4b0 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53  ../*.** If the S
2c4c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54  QLITE_ENABLE IOT
2c4d0 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e  RACE exists then
2c4e0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
2c4f0 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49  able.** sqlite3I
2c500 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e  oTrace is a poin
2c510 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d  ter to a printf-
2c520 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65  like routine use
2c530 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f  d to.** print I/
2c540 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67  O tracing messag
2c550 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  es..*/.#ifdef SQ
2c560 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
2c570 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  ACE.# define IOT
2c580 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c  RACE(A)  if( sql
2c590 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73  ite3IoTrace ){ s
2c5a0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b  qlite3IoTrace A;
2c5b0 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65   }.  void sqlite
2c5c0 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2c5d0 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41  Vdbe*);.SQLITE_A
2c5e0 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  PI SQLITE_EXTERN
2c5f0 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44   void (SQLITE_CD
2c600 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72  ECL *sqlite3IoTr
2c610 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a  ace)(const char*
2c620 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ,...);.#else.# d
2c630 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
2c640 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2c650 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
2c660 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2c670 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20   These routines 
2c680 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f  are available fo
2c690 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62  r the mem2.c deb
2c6a0 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c  ugging memory al
2c6b0 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e  locator.** only.
2c6c0 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20    They are used 
2c6d0 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64  to verify that d
2c6e0 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22  ifferent "types"
2c6f0 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c   of memory.** al
2c700 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72  locations are pr
2c710 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62  operly tracked b
2c720 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a  y the system..**
2c730 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2c740 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74  bugSetType() set
2c750 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20  s the "type" of 
2c760 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f  an allocation to
2c770 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d   one of.** the M
2c780 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20  EMTYPE_* macros 
2c790 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20  defined below.  
2c7a0 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65  The type must be
2c7b0 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a   a bitmask with.
2c7c0 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20  ** a single bit 
2c7d0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  set..**.** sqlit
2c7e0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2c7f0 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2c800 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62   if any of the b
2c810 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2c820 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2c830 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2c840 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2c850 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2c860 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71  SetType()..** sq
2c870 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2c880 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64  Type() is intend
2c890 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64  ed for use insid
2c8a0 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
2c8b0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ments..**.** sql
2c8c0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2c8d0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2c8e0 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  e if none of the
2c8f0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
2c900 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
2c910 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
2c920 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
2c930 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
2c940 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a  ugSetType()..**.
2c950 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d  ** Perhaps the m
2c960 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f  ost important po
2c970 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65  int is the diffe
2c980 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45  rence between ME
2c990 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e  MTYPE_HEAP.** an
2c9a0 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  d MEMTYPE_LOOKAS
2c9b0 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f  IDE.  If an allo
2c9c0 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50  cation is MEMTYP
2c9d0 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61  E_LOOKASIDE, tha
2c9e0 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69  t means.** it mi
2c9f0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ght have been al
2ca00 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61  located by looka
2ca10 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65  side, except the
2ca20 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a   allocation was.
2ca30 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20  ** too large or 
2ca40 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c  lookaside was al
2ca50 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20  ready full.  It 
2ca60 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20  is important to 
2ca70 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61  verify.** that a
2ca80 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20  llocations that 
2ca90 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2caa0 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f  satisfied by loo
2cab0 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a  kaside are not.*
2cac0 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f  * passed back to
2cad0 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
2cae0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20  ree() routines. 
2caf0 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73   Asserts such as
2cb00 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20   the.** example 
2cb10 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64  above are placed
2cb20 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b   on the non-look
2cb30 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2cb40 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a  tines to verify.
2cb50 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69  ** this constrai
2cb60 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  nt..**.** All of
2cb70 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66   this is no-op f
2cb80 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20  or a production 
2cb90 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20  build.  It only 
2cba0 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c  comes into.** pl
2cbb0 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49  ay when the SQLI
2cbc0 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70  TE_MEMDEBUG comp
2cbd0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
2cbe0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64  is used..*/.#ifd
2cbf0 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ef SQLITE_MEMDEB
2cc00 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
2cc10 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2cc20 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2cc30 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2cc40 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75  gHasType(void*,u
2cc50 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2cc60 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2cc70 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65  void*,u8);.#else
2cc80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2cc90 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2cca0 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  (X,Y)  /* no-op 
2ccb0 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  */.# define sqli
2ccc0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2ccd0 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66  pe(X,Y)  1.# def
2cce0 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2ccf0 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20  bugNoType(X,Y)  
2cd00 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e   1.#endif.#defin
2cd10 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20  e MEMTYPE_HEAP  
2cd20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65       0x01  /* Ge
2cd30 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63  neral heap alloc
2cd40 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
2cd50 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  e MEMTYPE_LOOKAS
2cd60 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65  IDE  0x02  /* He
2cd70 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ap that might ha
2cd80 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64  ve been lookasid
2cd90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  e */.#define MEM
2cda0 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20  TYPE_SCRATCH    
2cdb0 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68  0x04  /* Scratch
2cdc0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2cdd0 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2cde0 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20  PCACHE     0x08 
2cdf0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61   /* Page cache a
2ce00 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  llocations */../
2ce10 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69  *.** Threading i
2ce20 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20  nterface.*/.#if 
2ce30 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
2ce40 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20  R_THREADS>0.int 
2ce50 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65  sqlite3ThreadCre
2ce60 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64  ate(SQLiteThread
2ce70 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64  **,void*(*)(void
2ce80 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *),void*);.int s
2ce90 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e  qlite3ThreadJoin
2cea0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20  (SQLiteThread*, 
2ceb0 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a  void**);.#endif.
2cec0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2ced0 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41  ITE_ENABLE_DBSTA
2cee0 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e  T_VTAB) || defin
2cef0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
2cf00 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61  int sqlite3Dbsta
2cf10 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  tRegister(sqlite
2cf20 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  3*);.#endif..int
2cf30 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74   sqlite3ExprVect
2cf40 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78  orSize(Expr *pEx
2cf50 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  pr);.int sqlite3
2cf60 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70  ExprIsVector(Exp
2cf70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
2cf80 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69  *sqlite3VectorFi
2cf90 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a  eldSubexpr(Expr*
2cfa0 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
2cfb0 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74  lite3ExprForVect
2cfc0 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45  orField(Parse*,E
2cfd0 78 70 72 2a 2c 69 6e 74 29 3b 0a 0a 23 65 6e 64  xpr*,int);..#end
2cfe0 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f  if /* SQLITEINT_
2cff0 48 20 2a 2f 0a                                   H */.