/ Hex Artifact Content
Login

Artifact 770fd49c27345a46c9864470318aa0c384148128ab9ff6d8ea28d79720a326ce:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
55e0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
55f0: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5600: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5610: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5620: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5630: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5640: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5650: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5660: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5670: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5690: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
56a0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
56b0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
56c0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
56d0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
56e0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
56f0: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5700: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5710: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5720: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5730: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5740: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5750: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5760: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5770: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5780: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5790: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
57a0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
57b0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
57c0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
57d0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
57e0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
57f0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5800: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5810: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5820: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5830: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5840: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5850: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5860: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5870: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5880: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5890: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
58a0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
58b0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
58c0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
58d0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
58e0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
58f0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5900: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5910: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5920: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5930: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5940: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5950: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5960: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5970: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5980: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5990: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
59a0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
59b0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
59c0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
59d0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
59e0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
59f0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
5a00: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5a10: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
5a20: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5a30: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
5a40: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
5a50: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
5a60: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
5a70: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5a80: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
5a90: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
5aa0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
5ab0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
5ac0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
5ad0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
5ae0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5af0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
5b00: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5b10: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
5b20: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
5b30: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
5b40: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5b50: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5b60: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5b70: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5b80: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5b90: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5ba0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5bb0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5bc0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5bd0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
5c00: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
5c10: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
5c20: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
5c30: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
5c40: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5c50: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5c60: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5c70: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5c80: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5c90: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5ca0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5cb0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5cc0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5cd0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5ce0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5cf0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
5d00: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
5d10: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
5d20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5d30: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5d40: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5d50: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5d60: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5d70: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5d80: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5d90: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5da0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5db0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5dc0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5dd0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5de0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
5df0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
5e00: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
5e10: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
5e20: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
5e30: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
5e40: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5e50: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5e60: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5e70: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5e80: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5e90: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5ea0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5eb0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5ec0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5ed0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5ee0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
5ef0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
5f00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5f10: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
5f20: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
5f30: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
5f40: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5f50: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5f60: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5f70: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5f80: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5f90: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5fa0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5fb0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5fc0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5fd0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5fe0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
5ff0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6000: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6010: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6020: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6030: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6040: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6050: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6060: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6070: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6080: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
6090: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
60a0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
60b0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
60c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
60d0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
60e0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
60f0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6100: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6110: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6120: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6130: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6140: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6150: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6160: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6170: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6180: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
6190: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
61a0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
61b0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
61c0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
61d0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
61e0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
61f0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6200: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6210: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6220: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6230: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6240: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6250: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6260: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6270: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6280: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
6290: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
62a0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
62b0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
62c0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
62d0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
62e0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
62f0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6300: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6310: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6320: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6330: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6340: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6350: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6360: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6370: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6380: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
6390: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
63a0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
63b0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
63c0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
63d0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
63e0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
63f0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6400: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6410: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6420: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6430: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6440: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6450: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6460: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6470: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6480: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6490: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
64a0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
64b0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
64c0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
64d0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
64e0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
64f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6500: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6510: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6520: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6530: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6540: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6560: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6570: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6580: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6590: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
65a0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
65b0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
65c0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
65d0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
65e0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
65f0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6600: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
6610: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
6620: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
6630: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
6640: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
6650: 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20  if../* The uptr 
6660: 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67  type is an unsig
6670: 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67  ned integer larg
6680: 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64  e enough to hold
6690: 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69   a pointer.*/.#i
66a0: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53  f defined(HAVE_S
66b0: 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64  TDINT_H).  typed
66c0: 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74  ef uintptr_t upt
66d0: 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f  r;.#elif SQLITE_
66e0: 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70  PTRSIZE==4.  typ
66f0: 65 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23  edef u32 uptr;.#
6700: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
6710: 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a  64 uptr;.#endif.
6720: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
6730: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6740: 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20  macro checks to 
6750: 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50  see if pointer P
6760: 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f   points to.** so
6770: 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20  mething between 
6780: 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e  S (inclusive) an
6790: 64 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e  d E (exclusive).
67a0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  .**.** In other 
67b0: 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75  words, S is a bu
67c0: 66 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20  ffer and E is a 
67d0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
67e0: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a  irst byte after.
67f0: 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75  ** the end of bu
6800: 66 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61  ffer S.  This ma
6810: 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65  cro returns true
6820: 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20   if P points to 
6830: 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e  something.** con
6840: 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
6850: 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23  e buffer S..*/.#
6860: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49  define SQLITE_WI
6870: 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75  THIN(P,S,E) (((u
6880: 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28  ptr)(P)>=(uptr)(
6890: 53 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c  S))&&((uptr)(P)<
68a0: 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a  (uptr)(E))).../*
68b0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
68c0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
68d0: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
68e0: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
68f0: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
6900: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
6910: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
6920: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
6930: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
6940: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
6950: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
6960: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
6970: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
6980: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
6990: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
69a0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
69b0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
69c0: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
69d0: 5f 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20  _BYTEORDER=0 is 
69e0: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
69f0: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
6a00: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
6a10: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
6a20: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23  LITE_BYTEORDER.#
6a30: 20 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36   if defined(i386
6a40: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
6a50: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
6a60: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
6a70: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6a80: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
6a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6aa0: 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  _64__) || define
6ab0: 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20  d(_M_X64)  ||   
6ac0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ad0: 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66  _M_AMD64) || def
6ae0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20  ined(_M_ARM)    
6af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
6b00: 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  6)   ||    \.   
6b10: 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f    defined(__arm_
6b20: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6b30: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6b40: 20 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65    1234.# elif de
6b50: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6b60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6b70: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
6b80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6b90: 20 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23     4321.# else.#
6ba0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6bb0: 5f 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65  _BYTEORDER 0.# e
6bc0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
6bd0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6be0: 3d 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20  ==4321.# define 
6bf0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
6c00: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
6c10: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
6c20: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
6c30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6c40: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
6c50: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59  .#elif SQLITE_BY
6c60: 54 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20  TEORDER==1234.# 
6c70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
6c80: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
6c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6ca0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
6cb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6cc0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
6cd0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
6ce0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
6cf0: 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73  LGAMATION.  cons
6d00: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6d10: 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65   = 1;.# else.  e
6d20: 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20  xtern const int 
6d30: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e  sqlite3one;.# en
6d40: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
6d50: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6d60: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
6d70: 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64  ite3one)==0).# d
6d80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6d90: 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61  TLEENDIAN (*(cha
6da0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
6db0: 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53  )==1).# define S
6dc0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
6dd0: 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  E  (SQLITE_BIGEN
6de0: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
6df0: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
6e00: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
6e10: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
6e20: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
6e30: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
6e40: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
6e50: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
6e60: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
6e70: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
6e80: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
6e90: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
6ea0: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
6eb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
6ec0: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
6ed0: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
6ee0: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
6ef0: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
6f00: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
6f10: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
6f20: 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  4)../*.** Round 
6f30: 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74  up a number to t
6f40: 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d  he next larger m
6f50: 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54  ultiple of 8.  T
6f60: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74  his is used.** t
6f70: 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61  o force 8-byte a
6f80: 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62  lignment on 64-b
6f90: 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73  it architectures
6fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  ..*/.#define ROU
6fb0: 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29  ND8(x)     (((x)
6fc0: 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52  +7)&~7)../*.** R
6fd0: 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65  ound down to the
6fe0: 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c   nearest multipl
6ff0: 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e  e of 8.*/.#defin
7000: 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20  e ROUNDDOWN8(x) 
7010: 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  ((x)&~7)../*.** 
7020: 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
7030: 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69  pointer X is ali
7040: 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74  gned to an 8-byt
7050: 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69  e boundary.  Thi
7060: 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  s.** macro is us
7070: 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61  ed only within a
7080: 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66  ssert() to verif
7090: 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  y that the code 
70a0: 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67  gets.** all alig
70b0: 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f  nment restrictio
70c0: 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a  ns correct..**.*
70d0: 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c  * Except, if SQL
70e0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
70f0: 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66  ED_MALLOC is def
7100: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a  ined, then the.*
7110: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c  * underlying mal
7120: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
7130: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
7140: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
7150: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
7160: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
7170: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
7180: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
7190: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
71a0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
71b0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
71c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
71d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
71e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
71f0: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
7200: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7210: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7220: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7230: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
7240: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
7250: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
7260: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
7270: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
7280: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
7290: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
72a0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
72b0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
72c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
72d0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
72e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
72f0: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7300: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
7310: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
7320: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
7330: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
7340: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
7350: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
7360: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
7370: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
7380: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
7390: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
73a0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
73b0: 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20  (__linux__) \.  
73c0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  || defined(_WIN3
73d0: 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e  2) \.  || (defin
73e0: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26  ed(__APPLE__) &&
73f0: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f   defined(__MACH_
7400: 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  _)) \.  || defin
7410: 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c  ed(__sun) \.  ||
7420: 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42   defined(__FreeB
7430: 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  SD__) \.  || def
7440: 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79  ined(__DragonFly
7450: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
7460: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7470: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
7480: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
7490: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
74a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
74b0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
74c0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
74d0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
74e0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
74f0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
7500: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
7510: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
7520: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
7530: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
7540: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
7550: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
7560: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
7570: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
7580: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
7590: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
75a0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
75b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
75c0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75d0: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
75e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
75f0: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
7600: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
7610: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7620: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
7630: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7640: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
7650: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
7660: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
7670: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
7680: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
7690: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
76a0: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
76b0: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
76c0: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
76d0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
76e0: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
76f0: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
7700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7710: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7720: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
7730: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7740: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
7760: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7770: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7780: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
7790: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
77a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
77b0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
77c0: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
77d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
77e0: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
77f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7800: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7810: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
7820: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7830: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
7840: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
7850: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
7860: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
7870: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
7880: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
7890: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
78a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
78b0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
78c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
78d0: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
78e0: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
78f0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
7900: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
7910: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
7920: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
7930: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7940: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7950: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
7960: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
7970: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7980: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
7990: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  e..**.** The sql
79b0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
79c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
79d0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
79e0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
79f0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
7a00: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
7a10: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
7a20: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
7a30: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
7a40: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
7a50: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
7a60: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
7a70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
7a80: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
7a90: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
7aa0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
7ab0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
7ac0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7ad0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
7ae0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7af0: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
7b00: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
7b10: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
7b20: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
7b30: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
7b40: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7b50: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7b60: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7b70: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7b80: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
7b90: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
7ba0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
7bb0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
7bc0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
7bd0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
7be0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7bf0: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
7c00: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
7c10: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
7c20: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
7c30: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
7c40: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
7c50: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
7c60: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
7c70: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
7c80: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
7c90: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
7ca0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
7cb0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
7cc0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7cd0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
7ce0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7cf0: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
7d00: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
7d10: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
7d20: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
7d30: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
7d40: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
7d50: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
7d60: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
7d70: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
7d80: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
7d90: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
7da0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
7db0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
7dc0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
7dd0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
7de0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
7df0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
7e00: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
7e10: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
7e20: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
7e30: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
7e40: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
7e50: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
7e60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7e70: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
7e80: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
7e90: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
7ea0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
7eb0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
7ec0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
7ed0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
7ee0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a  instead of the.*
7ef0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
7f00: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
7f10: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
7f20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
7f30: 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73  ntroduce.** this
7f40: 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61   magic value tha
7f50: 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73  t the code knows
7f60: 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65   to handle diffe
7f70: 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20  rently.  Any.** 
7f80: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
7f90: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
7fa0: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
7fb0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
7fc0: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
7fd0: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
7fe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
7ff0: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
8000: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
8010: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
8020: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
8030: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
8040: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
8050: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
8060: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
8070: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
8080: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
8090: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
80a0: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
80b0: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
80c0: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
80d0: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
80e0: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
80f0: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
8100: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
8110: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
8120: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
8130: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
8140: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
8150: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
8160: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
8170: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
8180: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
8190: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
81a0: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
81b0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
81c0: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
81d0: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
81e0: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
81f0: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
8200: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
8210: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
8220: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
8230: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
8240: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
8250: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
8260: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
8270: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
8280: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
8290: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
82a0: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
82b0: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
82c0: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
82d0: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
82e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
82f0: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
8300: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
8310: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
8320: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
8330: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
8340: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
8350: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8360: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
8370: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
8380: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
8390: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
83a0: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
83b0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
83c0: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
83d0: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
83e0: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
83f0: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
8400: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
8410: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
8420: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
8430: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
8440: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
8450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
8460: 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  D.  #define GLOB
8470: 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66  AL(t,v) v.  #def
8480: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
8490: 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  lConfig sqlite3C
84a0: 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a  onfig.#endif../*
84b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
84c0: 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65  g macros are use
84d0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f  d to suppress co
84e0: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
84f0: 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69  and to.** make i
8500: 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e  t clear to human
8510: 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20   readers when a 
8520: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8530: 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65  er is deliberate
8540: 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65  ly.** left unuse
8550: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  d within the bod
8560: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e  y of a function.
8570: 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61   This usually ha
8580: 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20  ppens when.** a 
8590: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
85a0: 65 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f  ed via a functio
85b0: 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65  n pointer. For e
85c0: 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d  xample the.** im
85d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
85e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
85f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
8600: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
8610: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
8620: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
8630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
8640: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
8650: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
8660: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
8670: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
8680: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
8690: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
86a0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
86b0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
86c0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
86d0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
86e0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
86f0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
8700: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
8710: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
8720: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
8730: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
8740: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
8750: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
8760: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
8770: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
8780: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
8790: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
87a0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
87b0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
87c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
87d0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
87e0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
87f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
8800: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
8810: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
8820: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
8830: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
8840: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
8850: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
8860: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
8870: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
8880: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
8890: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
88a0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
88b0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
88c0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
88d0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
88e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
88f0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
8900: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8910: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
8920: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
8940: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
8950: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8960: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
8970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8980: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
8990: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
89a0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
89b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
89c0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
89d0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
89e0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
89f0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
8a00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
8a10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
8a20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8a30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
8a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8a50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
8a60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8a70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
8a80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
8a90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8aa0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
8ab0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8ac0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
8af0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8b00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
8b10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8b20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
8b30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8b40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
8b50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
8b60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
8b70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8b80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
8b90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
8ba0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8bb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
8bc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
8bd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
8be0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8bf0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
8c00: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
8c10: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
8c20: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
8c30: 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65  struct PreUpdate
8c40: 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65   PreUpdate;.type
8c50: 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74  def struct Print
8c60: 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74  fArguments Print
8c70: 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65  fArguments;.type
8c80: 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65  def struct RowSe
8c90: 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65  t RowSet;.typede
8ca0: 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  f struct Savepoi
8cb0: 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79  nt Savepoint;.ty
8cc0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
8cd0: 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65  ect Select;.type
8ce0: 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74  def struct SQLit
8cf0: 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68  eThread SQLiteTh
8d00: 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74  read;.typedef st
8d10: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
8d20: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
8d30: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
8d40: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
8d50: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
8d60: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
8d70: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
8d80: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
8d90: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
8da0: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
8dc0: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
8dd0: 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65  f struct TreeVie
8de0: 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65  w TreeView;.type
8df0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e00: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
8e10: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e20: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
8e30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e40: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
8e50: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
8e60: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
8e70: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
8e80: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
8e90: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
8ea0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8eb0: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
8ec0: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
8ed0: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
8ee0: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
8ef0: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
8f00: 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  reInfo;.typedef 
8f10: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
8f20: 3b 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62  ;../* A VList ob
8f30: 6a 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d  ject records a m
8f40: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70  apping between p
8f50: 61 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62  arameters/variab
8f60: 6c 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a  les/wildcards.**
8f70: 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74   in the SQL stat
8f80: 65 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24  ement (such as $
8f90: 61 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78  abc, @pqr, or :x
8fa0: 79 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65  yz) and the inte
8fb0: 67 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  ger.** variable 
8fc0: 6e 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65  number associate
8fd0: 64 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61  d with that para
8fe0: 6d 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20  meter.  See the 
8ff0: 66 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69  format descripti
9000: 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c  on.** on the sql
9010: 69 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72  ite3VListAdd() r
9020: 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20  outine for more 
9030: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20  information.  A 
9040: 56 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a  VList is really.
9050: 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79  ** just an array
9060: 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f   of integers..*/
9070: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69  .typedef int VLi
9080: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  st;../*.** Defer
9090: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
90a0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
90b0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
90c0: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
90d0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
90e0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
90f0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
9100: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
9110: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
9120: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
9130: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
9140: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
9150: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
9160: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
9170: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
9180: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
9190: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
91a0: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
91b0: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
91c0: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
91d0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
91e0: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
91f0: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
9200: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
9210: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
9220: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
9230: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
9240: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9250: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
9260: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9270: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
9280: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
9290: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
92a0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
92b0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
92c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
92d0: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
92e0: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
92f0: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
9300: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
9310: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
9320: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
9330: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
9340: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
9350: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9360: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
9370: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
9380: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
9390: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
93a0: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
93b0: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
93e0: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9400: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
9410: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9430: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
9440: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9460: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
9470: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9480: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
9490: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
94a0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
94b0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
94c0: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
94d0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
94e0: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
94f0: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
9500: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
9510: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
9520: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
9530: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9540: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9550: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9560: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9570: 43 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69  CHRONOUS 2.#endi
9580: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
9590: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
95a0: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
95b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
95c0: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
95d0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
95e0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64  SYNCHRONOUS.#end
95f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  if../*.** Each d
9600: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9610: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
9620: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
9630: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
9640: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9650: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
9660: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
9670: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9680: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9690: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
96a0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
96b0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
96c0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
96d0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
96e0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
96f0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
9700: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9710: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
9720: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
9730: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
9740: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
9750: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
9760: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
9770: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9780: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9790: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
97a0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
97b0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
97c0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
97d0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
97e0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
97f0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
9800: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9810: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
9820: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
9830: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
9840: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9850: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
9860: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
9870: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9880: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9890: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
98a0: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
98b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
98c0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
98d0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
98e0: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
98f0: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
9900: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9910: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
9920: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
9930: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
9940: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
9950: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
9960: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
9970: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9980: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9990: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
99a0: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
99b0: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
99c0: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
99d0: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
99e0: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
99f0: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
9a00: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
9a10: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
9a20: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
9a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
9a40: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
9a50: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
9a60: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
9a70: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
9a80: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
9a90: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
9aa0: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
9ab0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
9ac0: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
9ad0: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
9ae0: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
9af0: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
9b00: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
9b10: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
9b20: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
9b30: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
9b40: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
9b50: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
9b60: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
9b70: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
9b80: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
9b90: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
9ba0: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
9bb0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
9bc0: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
9bd0: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
9be0: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
9bf0: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
9c00: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
9c10: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
9c20: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
9c30: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
9c40: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
9c50: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
9c60: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
9c70: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
9c80: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
9c90: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
9ca0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
9cb0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9cc0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
9cd0: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
9ce0: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
9cf0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
9d00: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
9d10: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
9d20: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
9d30: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
9d40: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
9d50: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
9d60: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
9d70: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
9d80: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
9d90: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
9da0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
9db0: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
9dc0: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
9dd0: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
9de0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
9df0: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
9e00: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
9e10: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
9e20: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
9e30: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
9e40: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
9e50: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
9e60: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
9e70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
9e80: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
9e90: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
9ea0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9eb0: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
9ec0: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
9ed0: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
9ee0: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
9ef0: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
9f00: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
9f10: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
9f20: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
9f30: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
9f40: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
9f50: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
9f60: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9f70: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
9f80: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
9f90: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
9fa0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
9fb0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9fc0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
9fd0: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
9fe0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ff0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a000: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
a010: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
a020: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
a030: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
a040: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a050: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
a060: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
a070: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
a080: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a090: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
a0a0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
a0b0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
a0c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
a0d0: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
a0e0: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
a0f0: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
a100: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
a110: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
a120: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
a130: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
a140: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
a150: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
a160: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
a170: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
a180: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
a190: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
a1a0: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
a1b0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
a1c0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
a1d0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a1e0: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
a1f0: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
a200: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
a210: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
a220: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
a230: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
a240: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
a250: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
a260: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
a270: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a280: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a290: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a2a0: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
a2b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a2c0: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a2d0: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a2e0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a2f0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a300: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a310: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a320: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a330: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
a340: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
a350: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
a360: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
a370: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
a380: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
a390: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
a3a0: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
a3b0: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
a3c0: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
a3d0: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
a3e0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
a3f0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a400: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
a410: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
a420: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
a430: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
a440: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
a450: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
a460: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
a470: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
a480: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
a490: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
a4a0: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
a4b0: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
a4c0: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
a4d0: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
a4e0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
a4f0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
a500: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
a510: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
a520: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
a530: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a540: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
a550: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
a560: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
a570: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
a580: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
a590: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
a5a0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a5b0: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
a5c0: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
a5d0: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
a5e0: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
a5f0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a600: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
a610: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
a620: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
a630: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
a640: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
a650: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
a660: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
a670: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
a680: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
a690: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
a6a0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
a6b0: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
a6c0: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
a6d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
a6e0: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
a6f0: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
a700: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
a710: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
a720: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
a730: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
a740: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
a750: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
a760: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
a770: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
a780: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
a790: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
a7a0: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
a7b0: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
a7c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a7d0: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
a7e0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
a7f0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
a800: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
a810: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
a820: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
a830: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
a840: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
a850: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a860: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
a870: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
a880: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
a890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
a8a0: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
a8b0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
a8c0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
a8d0: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
a8e0: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
a8f0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
a900: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
a910: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
a920: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
a930: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
a940: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
a950: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
a960: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
a970: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
a980: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a9a0: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
a9b0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
a9c0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
a9d0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
a9e0: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
a9f0: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
aa00: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
aa10: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
aa20: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
aa30: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
aa40: 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e  ble for built-in
aa50: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
aa60: 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61  tions.  (Applica
aa70: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20  tion-defined.** 
aa80: 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
aa90: 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61  regular table ta
aaa0: 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e  ble from hash.h.
aab0: 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ).**.** Hash eac
aac0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
aad0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
aae0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
aaf0: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
ab00: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
ab10: 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48  the FuncDef.u.pH
ab20: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64  ash chain..*/.#d
ab30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ab40: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
ab50: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
ab60: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
ab70: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
ab80: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
ab90: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
aba0: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
abb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
abc0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
abd0: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
abe0: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
abf0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
ac00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
ac10: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
ac20: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
ac30: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
ac40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
ac50: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
ac60: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
ac70: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
ac80: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
ac90: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
acb0: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
acc0: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
acd0: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acf0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
ad00: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
ad10: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ad20: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
ad30: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
ad40: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
ad50: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
ad60: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
ad70: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
ad80: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
ad90: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
ada0: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
adb0: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
adc0: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
add0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
ade0: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
adf0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
ae00: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
ae10: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
ae20: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
ae30: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
ae40: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
ae50: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
ae60: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
ae70: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
ae80: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
ae90: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
aea0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
aeb0: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
aec0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
aed0: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
aee0: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
aef0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
af00: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
af10: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
af20: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
af30: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
af40: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
af50: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
af60: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
af70: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
af80: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
af90: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
afa0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
afb0: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
afc0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
afd0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
afe0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
aff0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
b000: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
b010: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
b020: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
b030: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
b040: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
b050: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
b060: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
b070: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b080: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b090: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b0a0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b0b0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
b0e0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
b0f0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
b100: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
b110: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
b120: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b130: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b160: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b170: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
b180: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
b190: 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20  ATED./* This is 
b1a0: 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f  an extra SQLITE_
b1b0: 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74  TRACE macro that
b1c0: 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61   indicates "lega
b1d0: 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69  cy" tracing.** i
b1e0: 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73  n the style of s
b1f0: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a  qlite3_trace().*
b200: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b210: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
b220: 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  x80.#else.#defin
b230: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
b240: 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20  EGACY  0.#endif 
b250: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  /* SQLITE_OMIT_D
b260: 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f  EPRECATED */.../
b270: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
b280: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b290: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b2a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
b2b0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b2c0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
b2d0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
b2e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b2f0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
b300: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
b310: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
b320: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
b330: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
b340: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
b350: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
b360: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
b370: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
b380: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
b390: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
b3a0: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
b3b0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b3c0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
b3d0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
b3e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b3f0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
b400: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b420: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
b430: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
b440: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
b450: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b460: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
b470: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
b480: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b490: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b4b0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b4c0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b4d0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b4e0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b4f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b500: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b510: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
b520: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
b530: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
b540: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
b550: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
b560: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
b570: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
b580: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
b590: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
b5a0: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
b5b0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b5d0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
b5e0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
b5f0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  returning */.  i
b600: 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20  nt iSysErrno;   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b620: 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d  Errno value from
b630: 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72   last system err
b640: 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  or */.  u16 dbOp
b650: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
b660: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
b670: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
b680: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
b690: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
b6c0: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
b6d0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
b6e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
b6f0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
b700: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
b710: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b720: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
b730: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
b740: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
b750: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
b760: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
b770: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
b780: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
b790: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
b7a0: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
b7b0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
b7c0: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
b7d0: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
b7e0: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
b7f0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
b800: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
b810: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
b820: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
b830: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
b840: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
b850: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
b860: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
b870: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
b880: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b890: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
b8a0: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
b8b0: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
b8c0: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
b8d0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
b8e0: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
b8f0: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
b900: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
b910: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
b920: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
b930: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
b940: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
b950: 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20  .  u8 mTrace;   
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b970: 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* zero or more
b980: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c   SQLITE_TRACE fl
b990: 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69 70  ags */.  u8 skip
b9a0: 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20 20 20  BtreeMutex;     
b9b0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
b9c0: 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68  f no shared-cach
b9d0: 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  e backends */.  
b9e0: 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20  u8 nSqlExec;    
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba00: 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69   Number of pendi
ba10: 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70  ng OP_SqlExec op
ba20: 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  codes */.  int n
ba30: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
ba40: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
ba50: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
ba60: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
ba70: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
ba80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
ba90: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
baa0: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
bab0: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
bac0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
bad0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
bae0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
baf0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
bb00: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
bb10: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
bb20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
bb30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
bb40: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
bb50: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
bb60: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
bb70: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
bb80: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
bb90: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
bba0: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
bbb0: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
bbc0: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
bbd0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
bbe0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
bbf0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
bc00: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
bc10: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
bc20: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
bc30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
bc40: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
bc50: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
bc60: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
bc90: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
bca0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
bcb0: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bcd0: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
bce0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
bcf0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
bd00: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
bd10: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
bd20: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
bd30: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
bd40: 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72  .    u8 imposter
bd50: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
bd60: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
bd70: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
bd80: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
bd90: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bdb0: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
bdc0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
bdd0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
bde0: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
bdf0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
be00: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
be10: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
be20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
be30: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
be40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
be50: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
be60: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
be70: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
be80: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
be90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bea0: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
beb0: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
bec0: 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b    int nVDestroy;
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bef0: 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20  ive OP_VDestroy 
bf00: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  operations */.  
bf10: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf30: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
bf40: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
bf50: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
bf60: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
bf70: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
bf80: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
bf90: 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54  es */.  int (*xT
bfa0: 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c  race)(u32,void*,
bfb0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20  void*,void*);   
bfc0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
bfd0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
bfe0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c010: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
c020: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
c030: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
c040: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
c050: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
c060: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c070: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
c080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c090: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c0a0: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
c0b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c0c0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0e0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c0f0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c100: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c110: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c120: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c130: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c140: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c150: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
c160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c170: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
c180: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
c190: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
c1a0: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
c1b0: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
c1c0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
c1d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
c1e0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
c1f0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
c200: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
c210: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
c220: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
c230: 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  4);.#ifdef SQLIT
c240: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
c250: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
c260: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
c270: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
c280: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
c290: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
c2a0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
c2b0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
c2c0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
c2d0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
c2e0: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
c2f0: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
c300: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
c310: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
c320: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
c330: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
c340: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
c350: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
c360: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
c370: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
c380: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
c390: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
c3a0: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
c3b0: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
c3c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
c3d0: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
c3e0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
c3f0: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
c400: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
c410: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
c420: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
c430: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
c440: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
c450: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
c460: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
c470: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
c480: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
c490: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
c4a0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
c4b0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
c4c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
c4d0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
c4e0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
c4f0: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
c500: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
c510: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
c520: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
c530: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
c540: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
c550: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
c560: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
c570: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
c580: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
c590: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
c5a0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
c5b0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
c5c0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
c5d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
c5e0: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
c5f0: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
c600: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
c610: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
c620: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
c630: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c640: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
c650: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
c660: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c670: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
c680: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
c690: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c6a0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
c6b0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
c6c0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
c6d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
c6e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
c6f0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
c700: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
c710: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c720: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
c730: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
c740: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
c750: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
c760: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
c770: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
c780: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
c790: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c7a0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
c7b0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7d0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
c7e0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
c7f0: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c810: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
c820: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
c830: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
c840: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
c850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c860: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
c870: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
c880: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
c890: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
c8a0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
c8b0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
c8c0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
c8d0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
c8e0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
c8f0: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
c900: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
c910: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
c920: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
c930: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c940: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
c950: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
c960: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
c970: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c990: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
c9a0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
c9b0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
c9c0: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
c9d0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
c9e0: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
c9f0: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
ca00: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
ca10: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
ca20: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
ca30: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
ca40: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
ca50: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
ca60: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
ca70: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca90: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
caa0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
cab0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
cac0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
cad0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
cae0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
caf0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
cb00: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb20: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
cb30: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
cb40: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
cb50: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cb70: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
cb80: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
cb90: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
cba0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
cbb0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
cbc0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
cbd0: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
cbe0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
cbf0: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
cc00: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
cc10: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
cc20: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
cc30: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
cc40: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
cc50: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
cc60: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
cc70: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
cc80: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
cc90: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
cca0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
ccb0: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
ccc0: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
ccd0: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
cce0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
ccf0: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
cd00: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
cd10: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
cd20: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
cd30: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
cd40: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
cd50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
cd60: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
cd70: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
cd80: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
cd90: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
cda0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
cdb0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
cdc0: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
cdd0: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
cde0: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
cdf0: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
ce00: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
ce10: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
ce20: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
ce30: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
ce40: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
ce50: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
ce60: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
ce70: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
ce80: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
ce90: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
cea0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cec0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ced0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
cee0: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
cef0: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
cf00: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
cf10: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
cf20: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
cf30: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
cf40: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
cf50: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
cf60: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
cf70: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
cf80: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
cf90: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
cfa0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
cfb0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
cfc0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
cfd0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
cfe0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
cff0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d000: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d010: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d020: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d030: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d040: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d050: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d060: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d070: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d080: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d090: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d0a0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d0b0: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d0c0: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d0d0: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d0e0: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d0f0: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d100: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d110: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d120: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d130: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d140: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d150: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d160: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
d170: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
d180: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
d190: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
d1a0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
d1b0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
d1c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d1d0: 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20  _InternChanges  
d1e0: 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55  0x00000002  /* U
d1f0: 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20  ncommitted Hash 
d200: 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f  table changes */
d210: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d220: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
d230: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
d240: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
d250: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
d260: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d270: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
d280: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
d290: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
d2a0: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
d2b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d2c0: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
d2d0: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
d2e0: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
d2f0: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
d300: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
d310: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
d320: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
d330: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
d340: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
d350: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
d360: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
d370: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
d380: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
d390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
d3a0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
d3b0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
d3c0: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
d3d0: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
d410: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
d420: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
d460: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
d470: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
d480: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
d490: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
d4a0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
d4b0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
d4c0: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
d500: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
d510: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d520: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
d530: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62  00000200  /* Deb
d540: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
d550: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
d560: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
d570: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30  beListing    0x0
d580: 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75  0000400  /* Debu
d590: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
d5a0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
d5b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72  define SQLITE_Wr
d5c0: 69 74 65 53 63 68 65 6d 61 20 20 20 20 30 78 30  iteSchema    0x0
d5d0: 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74  0000800  /* OK t
d5e0: 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f  o update SQLITE_
d5f0: 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e  MASTER */.#defin
d600: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
d610: 6f 70 54 72 61 63 65 20 30 78 30 30 30 30 31 30  opTrace 0x000010
d620: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
d630: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
d640: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
d650: 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68   SQLITE_IgnoreCh
d660: 65 63 6b 73 20 20 20 30 78 30 30 30 30 32 30 30  ecks   0x0000200
d670: 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66  0  /* Do not enf
d680: 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74  orce check const
d690: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
d6a0: 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  e SQLITE_ReadUnc
d6b0: 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30 34 30  ommitted 0x00040
d6c0: 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65  00  /* For share
d6d0: 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
d6e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
d6f0: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
d700: 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65  00008000  /* Cre
d710: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
d720: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
d730: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d740: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30  RecoveryMode   0
d750: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67  x00010000  /* Ig
d760: 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f  nore schema erro
d770: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
d780: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
d790: 72 20 20 20 30 78 30 30 30 32 30 30 30 30 20 20  r   0x00020000  
d7a0: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
d7b0: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
d7c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
d7d0: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
d7e0: 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61  00040000  /* Ena
d7f0: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
d800: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
d810: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
d820: 4b 65 79 73 20 20 20 20 30 78 30 30 30 38 30 30  Keys    0x000800
d830: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
d840: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
d850: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
d860: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
d870: 64 65 78 20 20 20 20 20 20 30 78 30 30 31 30 30  dex      0x00100
d880: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
d890: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
d8a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d8b0: 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  TE_PreferBuiltin
d8c0: 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a    0x00200000  /*
d8d0: 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62   Preference to b
d8e0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f  uilt-in funcs */
d8f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d900: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
d910: 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00400000  /* En
d920: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
d930: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d940: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e  QLITE_LoadExtFun
d950: 63 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20  c    0x00800000 
d960: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
d970: 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20  extension() SQL 
d980: 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
d990: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69  SQLITE_EnableTri
d9a0: 67 67 65 72 20 20 30 78 30 31 30 30 30 30 30 30  gger  0x01000000
d9b0: 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
d9c0: 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
d9d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
d9e0: 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78  eferFKs       0x
d9f0: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 65 66  02000000  /* Def
da00: 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72  er all FK constr
da10: 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65  aints */.#define
da20: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c   SQLITE_QueryOnl
da30: 79 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30  y      0x0400000
da40: 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61  0  /* Disable da
da50: 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a  tabase changes *
da60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
da70: 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20  _VdbeEQP        
da80: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
da90: 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45  ebug EXPLAIN QUE
daa0: 52 59 20 50 4c 41 4e 20 2a 2f 0a 23 64 65 66 69  RY PLAN */.#defi
dab0: 6e 65 20 53 51 4c 49 54 45 5f 56 61 63 75 75 6d  ne SQLITE_Vacuum
dac0: 20 20 20 20 20 20 20 20 20 30 78 31 30 30 30 30           0x10000
dad0: 30 30 30 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  000  /* Currentl
dae0: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
daf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db00: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
db10: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 43 68  x20000000  /* Ch
db20: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
db30: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
db40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
db50: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
db60: 34 30 30 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  40000000  /* Ena
db70: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
db80: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
db90: 20 53 51 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e   SQLITE_NoCkptOn
dba0: 43 6c 6f 73 65 20 20 30 78 38 30 30 30 30 30 30  Close  0x8000000
dbb0: 30 20 20 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f  0  /* No checkpo
dbc0: 69 6e 74 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44  int on close()/D
dbd0: 45 54 41 43 48 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  ETACH */.../*.**
dbe0: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
dbf0: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
dc00: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
dc10: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
dc20: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
dc30: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
dc40: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
dc50: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
dc60: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
dc70: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
dc80: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
dc90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dca0: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
dcb0: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
dcc0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
dcd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dce0: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
dcf0: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
dd00: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
dd10: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
dd20: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
dd30: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
dd40: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
dd50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd60: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
dd70: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
dd80: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
dd90: 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20  /./*            
dda0: 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20      not used    
ddb0: 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a  0x0010   // Was:
ddc0: 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41   SQLITE_IdxRealA
ddd0: 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sInt */.#define 
dde0: 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f  SQLITE_DistinctO
ddf0: 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f  pt    0x0020   /
de00: 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67  * DISTINCT using
de10: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
de20: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72  ine SQLITE_Cover
de30: 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30  IdxScan   0x0040
de40: 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69     /* Covering i
de50: 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64  ndex scans */.#d
de60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64  efine SQLITE_Ord
de70: 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30  erByIdxJoin 0x00
de80: 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59  80   /* ORDER BY
de90: 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e   of joins via in
dea0: 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
deb0: 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74  QLITE_SubqCorout
dec0: 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a  ine  0x0100   /*
ded0: 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65   Evaluate subque
dee0: 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e  ries as coroutin
def0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
df00: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
df10: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
df20: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
df30: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
df40: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
df50: 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20  pJoin   0x0400  
df60: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
df70: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
df80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
df90: 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20  E_Stat34        
dfa0: 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65   0x0800   /* Use
dfb0: 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20   STAT3 or STAT4 
dfc0: 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
dfd0: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
dfe0: 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20 2f  ts    0x2000   /
dff0: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
e000: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
e010: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
e020: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
e030: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
e040: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
e050: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
e060: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
e070: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
e080: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
e090: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
e0a0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
e0b0: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
e0c0: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
e0d0: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
e0e0: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
e0f0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
e100: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
e110: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
e120: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
e130: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
e140: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
e150: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
e160: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
e170: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
e180: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
e190: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
e1a0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
e1b0: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
e1c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
e1d0: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
e1e0: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
e1f0: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
e200: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
e210: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
e220: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
e230: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
e240: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
e250: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
e260: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
e270: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
e280: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
e290: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
e2a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e2b0: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
e2c0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
e2d0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
e2e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e2f0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
e300: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
e310: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
e320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e330: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
e340: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
e350: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
e360: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
e370: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
e380: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
e390: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
e3a0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
e3b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e3c0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
e3d0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
e3e0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
e3f0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
e400: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e410: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
e420: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
e430: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
e440: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
e450: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
e460: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
e470: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
e480: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e490: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
e4a0: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
e4b0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
e4c0: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
e4d0: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
e4e0: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
e4f0: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
e500: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
e510: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
e520: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
e530: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
e540: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
e550: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
e560: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
e570: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
e580: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
e590: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
e5a0: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
e5b0: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
e5c0: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
e5d0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
e5e0: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
e5f0: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
e600: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
e610: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
e620: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
e630: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
e640: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
e650: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e660: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
e670: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
e680: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
e690: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
e6a0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
e6b0: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
e6c0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
e6d0: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
e6e0: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
e6f0: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
e700: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
e710: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
e720: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
e730: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
e740: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
e750: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
e760: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
e770: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
e780: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
e790: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
e7a0: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
e7b0: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
e7c0: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  alizer */.  cons
e7d0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
e7e0: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
e7f0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
e800: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46  .  union {.    F
e810: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
e820: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
e830: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
e840: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
e850: 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ash */.    FuncD
e860: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
e870: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
e880: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
e890: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
e8a0: 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  on */.  } u;.};.
e8b0: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  ./*.** This stru
e8c0: 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74  cture encapsulat
e8d0: 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69  es a user-functi
e8e0: 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61  on destructor ca
e8f0: 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f  llback (as.** co
e900: 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63  nfigured using c
e910: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
e920: 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72  2()) and a refer
e930: 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68  ence counter. Wh
e940: 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e  en.** create_fun
e950: 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61  ction_v2() is ca
e960: 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  lled to create a
e970: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
e980: 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20   destructor,.** 
e990: 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20  a single object 
e9a0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
e9b0: 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44  allocated. FuncD
e9c0: 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69  estructor.nRef i
e9d0: 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20  s set to.** the 
e9e0: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
e9f0: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
ea00: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
ea10: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
ea20: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
ea30: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
ea40: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
ea50: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
ea60: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
ea70: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
ea80: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
ea90: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
eaa0: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
eab0: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
eac0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
ead0: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
eae0: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
eaf0: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
eb00: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
eb10: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
eb20: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
eb30: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
eb40: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
eb50: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
eb60: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
eb70: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
eb80: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
eb90: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
eba0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
ebb0: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
ebc0: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
ebd0: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
ebe0: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
ebf0: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
ec00: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
ec10: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
ec20: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
ec30: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
ec40: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
ec50: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
ec60: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
ec70: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
ec80: 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53  OFARG.  And.** S
ec90: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
eca0: 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ANT must be the 
ecb0: 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44  same as SQLITE_D
ecc0: 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54  ETERMINISTIC.  T
ecd0: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
ece0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
ecf0: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
ed00: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a  erify this..**.*
ed10: 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
ed20: 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
ed30: 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
ed40: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
ed50: 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43  MINMAX    ==  NC
ed60: 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
ed70: 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a  == SF_MinMaxAgg.
ed80: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
ed90: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20  NC_LENGTH    == 
eda0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
edb0: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
edc0: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d  FUNC_TYPEOF    =
edd0: 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  =  OPFLAG_TYPEOF
ede0: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
edf0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
ee00: 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45   ==  SQLITE_DETE
ee10: 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74  RMINISTIC from t
ee20: 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  he API.**     SQ
ee30: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
ee40: 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53  K   depends on S
ee50: 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f  QLITE_UTF* macro
ee60: 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a  s in the API.*/.
ee70: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ee80: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
ee90: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
eea0: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
eeb0: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
eec0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
eed0: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
eee0: 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  0004 /* Candidat
eef0: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
ef00: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
ef10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ef20: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
ef30: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
ef40: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
ef50: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
ef60: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ef70: 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f  PHEM    0x0010 /
ef80: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
ef90: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
efa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
efb0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
efc0: 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  x0020 /* sqlite3
efd0: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
efe0: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
eff0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f000: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
f010: 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0040 /* Built-
f020: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
f030: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f040: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
f050: 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42  OF   0x0080 /* B
f060: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
f070: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
f080: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f090: 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30  _COUNT    0x0100
f0a0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
f0b0: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
f0c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f0d0: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
f0e0: 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0200 /* Built-
f0f0: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
f100: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
f110: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f120: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30  _UNLIKELY 0x0400
f130: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c   /* Built-in unl
f140: 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e  ikely() function
f150: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f160: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f170: 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74   0x0800 /* Const
f180: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
f190: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
f1a0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
f1b0: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
f1c0: 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65    0x1000 /* True
f1d0: 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d   for min() and m
f1e0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20  ax() aggregates 
f1f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f200: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20  E_FUNC_SLOCHNG  
f210: 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20  0x2000 /* "Slow 
f220: 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63  Change". Value c
f230: 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61  onstant during a
f240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f260: 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71       ** single q
f270: 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61  uery - might cha
f280: 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f  nge over time */
f290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f2a0: 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78  FUNC_AFFINITY 0x
f2b0: 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  4000 /* Built-in
f2c0: 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63   affinity() func
f2d0: 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tion */../*.** T
f2e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
f2f0: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
f300: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
f310: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
f320: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
f330: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
f340: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
f350: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
f360: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
f370: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f380: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f390: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
f3a0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
f3b0: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
f3c0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
f3d0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
f3e0: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
f3f0: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
f400: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
f410: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
f420: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
f430: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
f440: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
f450: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
f460: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
f470: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
f480: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
f490: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
f4a0: 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20  nction. If.**   
f4b0: 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
f4c0: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
f4d0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
f4e0: 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
f4f0: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43  t..**.**   VFUNC
f500: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f510: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f520: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
f530: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
f540: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
f550: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f560: 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  T flag..**.**   
f570: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
f580: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f590: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
f5a0: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
f5b0: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
f5c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f5d0: 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a  NSTANT flag and.
f5e0: 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20  **     adds the 
f5f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f600: 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20  HNG flag.  Used 
f610: 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20  for date & time 
f620: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20  functions.**    
f630: 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c   and functions l
f640: 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69  ike sqlite_versi
f650: 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68  on() that can ch
f660: 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75  ange, but not du
f670: 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69  ring.**     a si
f680: 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  ngle query..**.*
f690: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
f6a0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
f6b0: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
f6c0: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
f6d0: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
f6e0: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
f6f0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
f700: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
f710: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
f720: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
f730: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
f740: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
f750: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
f760: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
f770: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
f780: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
f790: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
f7a0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
f7b0: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
f7c0: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
f7d0: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
f7e0: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
f7f0: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
f800: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
f810: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
f820: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
f830: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
f840: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
f850: 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
f860: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
f870: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
f880: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
f890: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
f8a0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
f8b0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
f8c0: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
f8d0: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
f8e0: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
f8f0: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
f900: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
f910: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
f920: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
f930: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
f940: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
f950: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f960: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f970: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
f980: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f990: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
f9a0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f9b0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f9c0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
f9d0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
f9e0: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
f9f0: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  0} }.#define VFU
fa00: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
fa10: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fa20: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
fa30: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
fa40: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
fa50: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fa60: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fa70: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
fa80: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
fa90: 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54  }.#define DFUNCT
faa0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fab0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fac0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
fad0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
fae0: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
faf0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
fb00: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
fb10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
fb20: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
fb30: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
fb40: 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
fb50: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
fb60: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fb70: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
fb80: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
fb90: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
fba0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
fbb0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fbc0: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
fbd0: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
fbe0: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
fbf0: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
fc00: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
fc10: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
fc20: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
fc30: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
fc40: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
fc50: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
fc60: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
fc70: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
fc80: 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  LL), \.   pArg, 
fc90: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
fca0: 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c  ame, }.#define L
fcb0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
fcc0: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
fcd0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fce0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fcf0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
fd00: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
fd10: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
fd20: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fd30: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  } }.#define AGGR
fd40: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
fd50: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
fd60: 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
fd70: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
fd80: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
fd90: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
fda0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fdb0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
fdc0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
fdd0: 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
fde0: 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
fdf0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
fe00: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
fe10: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
fe20: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
fe30: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
fe40: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
fe50: 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
fe60: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
fe70: 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
fe80: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
fe90: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
fea0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
feb0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
fec0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
fed0: 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
fee0: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
fef0: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
ff00: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
ff10: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
ff20: 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
ff30: 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
ff40: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
ff50: 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
ff60: 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
ff70: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
ff80: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
ff90: 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
ffa0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ffc0: 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
ffd0: 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
ffe0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
fff0: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
10000 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10010 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
10020 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
10030 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
10040 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
10050 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10060 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
10070 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
10080 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
100a0 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
100b0 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
100c0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
100d0 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
100e0 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
100f0 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
10100 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
10110 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
10120 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
10130 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
10140 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
10150 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
10160 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
10170 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
10180 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
10190 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
101a0 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
101b0 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
101c0 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
101d0 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
101e0 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
101f0 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10200 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10210 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
10220 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
10230 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
10240 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
10250 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
10260 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
10270 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
10280 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
10290 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
102a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
102c0 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
102d0 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
102e0 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
10310 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10320 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10330 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
10340 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
10350 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
10360 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
10370 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
10380 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
103a0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
103b0 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
103c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
103d0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
103e0 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
103f0 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
10400 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
10410 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10420 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10430 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
10440 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
10450 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
10460 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
10470 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
10480 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
10490 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
104a0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
104b0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
104c0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
104d0 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
104e0 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
104f0 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
10500 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
10510 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
10520 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
10530 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
10540 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
10550 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
10560 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
10570 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
10580 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
10590 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
105a0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
105b0 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
105c0 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
105d0 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
105e0 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
105f0 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
10600 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
10610 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
10620 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
10630 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
10640 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
10650 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
10660 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
10670 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
10680 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
10690 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
106a0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
106b0 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
106c0 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
106d0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
106e0 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
106f0 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
10700 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
10710 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
10720 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
10730 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
10740 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
10750 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10760 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
10770 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
10780 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
10790 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
107a0 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
107b0 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
107c0 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
107d0 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
107e0 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
107f0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
10800 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
10810 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
10820 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
10830 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
10840 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
10850 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
10860 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
10870 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
10880 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
10890 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
108a0 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
108b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
108c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
108d0 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
108e0 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
108f0 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
10900 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
10910 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
10920 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
10930 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
10940 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
10950 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
10960 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
10970 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
10980 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
10990 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
109a0 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
109b0 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
109c0 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
109d0 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
109e0 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
109f0 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
10a00 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
10a10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
10a20 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
10a30 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
10a40 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
10a50 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
10a60 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
10a70 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
10a80 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
10a90 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
10aa0 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
10ab0 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
10ac0 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
10ad0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
10ae0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
10af0 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
10b00 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
10b10 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
10b20 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
10b30 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
10b40 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
10b50 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
10b60 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
10b70 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
10b80 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
10b90 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
10ba0 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
10bb0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
10bc0 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
10bd0 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
10be0 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
10bf0 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
10c00 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
10c10 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
10c20 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
10c30 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
10c40 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
10c50 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
10c60 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
10c70 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
10c80 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
10c90 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
10ca0 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
10cb0 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
10cc0 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
10cd0 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
10ce0 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
10cf0 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
10d00 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
10d10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10d20 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
10d30 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10d40 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
10d50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10d60 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
10d70 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10d80 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
10d90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10da0 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
10db0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
10dc0 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
10dd0 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
10de0 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
10df0 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
10e00 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
10e10 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
10e20 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
10e30 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
10e40 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
10e50 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
10e60 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
10e70 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
10e80 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
10e90 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
10ea0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
10eb0 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
10ec0 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
10ed0 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
10ee0 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
10ef0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
10f00 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
10f10 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
10f20 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
10f30 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
10f40 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
10f50 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
10f60 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
10f70 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
10f80 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
10f90 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
10fa0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
10fb0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
10fc0 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
10fd0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10fe0 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
10ff0 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
11000 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
11010 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11020 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
11030 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
11040 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
11050 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
11060 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
11070 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
11080 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
11090 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
110a0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
110b0 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
110c0 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
110d0 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
110e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
110f0 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
11100 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
11110 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
11120 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
11130 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
11140 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
11150 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
11160 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
11170 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
11180 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
11190 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
111a0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
111b0 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
111c0 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
111d0 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
111e0 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
111f0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11200 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
11210 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
11220 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
11230 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
11240 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11250 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
11260 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
11270 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11280 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
11290 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
112a0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
112b0 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
112c0 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
112d0 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
112e0 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
112f0 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
11300 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
11310 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
11320 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
11330 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
11340 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
11350 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
11360 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
11370 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
11380 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
11390 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
113a0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
113b0 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
113c0 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
113d0 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
113e0 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
113f0 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
11400 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11410 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
11420 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
11430 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
11440 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
11450 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
11460 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
11470 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
11480 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
11490 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
114a0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
114b0 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
114c0 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
114d0 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
114e0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
114f0 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
11500 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
11510 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
11520 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11530 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
11540 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
11550 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
11560 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
11570 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
11580 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
11590 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
115a0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
115b0 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
115c0 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
115d0 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
115e0 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
115f0 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
11600 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
11610 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
11620 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
11630 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
11640 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
11650 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
11660 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
11670 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
11680 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
11690 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
116a0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
116b0 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
116c0 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
116d0 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
116e0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
116f0 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
11700 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
11710 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
11720 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
11730 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
11740 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
11750 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
11760 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
11770 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
11780 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
11790 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
117a0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
117b0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
117c0 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
117d0 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
117e0 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
117f0 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
11800 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
11810 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
11820 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
11830 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
11840 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
11850 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
11860 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
11870 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
11880 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
11890 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
118a0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
118b0 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
118c0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
118d0 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
118e0 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
118f0 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
11900 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
11910 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
11920 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
11930 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
11940 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
11950 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
11960 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
11970 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
11980 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
11990 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
119a0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
119b0 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
119c0 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
119d0 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
119e0 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
119f0 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
11a00 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
11a10 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
11a20 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
11a30 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
11a40 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
11a50 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
11a60 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
11a70 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
11a80 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
11a90 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
11aa0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
11ab0 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
11ac0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11ae0 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
11af0 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
11b00 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
11b10 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
11b20 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
11b30 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
11b40 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
11b50 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
11b60 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
11b70 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
11b80 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
11b90 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11bb0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
11bc0 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
11bd0 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
11be0 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
11bf0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
11c00 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
11c10 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
11c20 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
11c30 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
11c40 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
11c50 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
11c60 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
11c70 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
11c80 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
11c90 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
11ca0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
11cb0 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
11cc0 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
11cd0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
11ce0 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
11cf0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11d00 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11d10 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
11d20 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
11d30 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
11d40 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
11d50 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
11d60 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
11d70 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
11d80 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
11d90 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
11da0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
11db0 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
11dc0 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
11dd0 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
11de0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
11df0 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
11e00 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
11e10 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
11e20 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
11e30 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
11e40 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
11e50 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
11e60 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
11e70 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
11e80 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
11e90 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
11ea0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
11eb0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
11ec0 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
11ed0 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
11ee0 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
11f10 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
11f20 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
11f30 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
11f40 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
11f50 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
11f60 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
11f70 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
11f80 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
11f90 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
11fa0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
11fb0 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
11fc0 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
11fd0 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
11fe0 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
11ff0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
12000 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
12010 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
12020 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
12030 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
12040 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12050 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
12060 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
12070 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
12080 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
12090 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
120a0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
120b0 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
120c0 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
120d0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
120e0 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
120f0 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
12100 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
12110 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
12120 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
12130 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
12140 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
12150 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
12160 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
12170 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
12180 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
12190 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
121a0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
121b0 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
121c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
121d0 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
121e0 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
121f0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
12200 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
12210 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
12220 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
12230 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12240 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
12250 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
12260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12270 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
12280 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
12290 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
122a0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
122b0 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
122c0 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
122d0 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
122e0 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
122f0 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
12300 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
12310 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
12320 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
12330 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
12340 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
12350 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
12360 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
12370 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
12380 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12390 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
123a0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
123b0 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
123c0 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
123d0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
123e0 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
123f0 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
12400 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
12410 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
12420 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
12430 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
12440 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
12450 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
12460 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
12470 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
12480 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
12490 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
124a0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
124b0 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
124c0 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
124d0 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
124e0 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
124f0 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
12500 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
12510 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
12520 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
12530 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
12540 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
12550 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
12560 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
12570 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
12580 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
12590 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
125a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
125b0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
125c0 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
125d0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
125e0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
125f0 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
12600 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
12610 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
12620 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
12630 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
12640 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
12650 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
12660 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
12670 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
12680 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
12690 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
126a0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
126b0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
126c0 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
126d0 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
126e0 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
126f0 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
12700 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
12710 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
12720 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
12730 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
12740 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
12750 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
12760 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
12770 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
12780 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
12790 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
127a0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
127b0 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
127c0 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
127d0 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
127e0 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
12820 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
12830 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
12840 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
12850 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
12860 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
12870 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
12880 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
12890 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
128a0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
128b0 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
128c0 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
128d0 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
128e0 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
128f0 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
12900 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
12910 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
12920 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
12930 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12940 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12950 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
12960 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
12970 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
12980 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
12990 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
129a0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
129b0 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
129c0 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
129d0 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
129e0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
129f0 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
12a00 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
12a10 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
12a20 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
12a30 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
12a40 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
12a50 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
12a60 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
12a70 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
12a80 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
12a90 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
12aa0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
12ab0 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
12ac0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
12ad0 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
12ae0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
12af0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
12b00 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
12b10 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
12b20 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
12b30 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
12b40 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
12b50 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12b60 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12b70 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
12b80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
12b90 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
12ba0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12bb0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12bc0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
12bd0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
12be0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
12bf0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12c00 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
12c10 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
12c20 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
12c30 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
12c40 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
12c50 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
12c60 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
12c70 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
12c80 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
12c90 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
12ca0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
12cb0 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
12cc0 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
12cd0 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
12ce0 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
12cf0 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
12d00 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
12d10 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
12d20 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
12d30 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
12d40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
12d50 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
12d60 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
12d70 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
12d80 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
12d90 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
12da0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
12db0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
12dc0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
12dd0 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
12de0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
12df0 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
12e00 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
12e10 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
12e20 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
12e30 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
12e40 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
12e50 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
12e60 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
12e70 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
12e80 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
12e90 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
12ea0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
12eb0 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
12ec0 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
12ed0 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
12ee0 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
12ef0 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
12f00 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
12f10 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
12f20 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
12f30 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
12f40 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
12f50 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
12f60 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
12f70 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
12f80 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
12f90 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
12fa0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
12fb0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
12fc0 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
12fd0 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
12fe0 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
12ff0 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
13000 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
13010 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
13020 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
13030 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
13040 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
13050 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
13060 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
13070 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
13080 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
13090 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
130a0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
130b0 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
130c0 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
130d0 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
130e0 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
130f0 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
13100 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
13110 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
13120 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
13130 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
13140 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
13150 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
13160 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
13170 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
13180 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
13190 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
131a0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
131b0 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
131c0 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
131d0 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
131e0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
131f0 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
13200 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
13210 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
13220 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
13230 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
13240 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
13250 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
13260 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
13270 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
13280 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
13290 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
132a0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
132b0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
132c0 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
132d0 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
132e0 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
132f0 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
13300 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
13310 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
13320 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
13330 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
13340 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
13350 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
13360 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
13370 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
13380 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
13390 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
133a0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
133b0 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
133c0 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
133d0 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
133e0 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
133f0 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
13400 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
13410 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
13420 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
13430 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
13440 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
13450 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
13460 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
13470 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
13480 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
13490 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
134a0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
134b0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
134c0 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
134d0 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
134e0 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
134f0 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
13500 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
13510 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
13520 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
13530 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
13540 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
13550 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
13560 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
13570 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
13580 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
13590 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
135a0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
135b0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
135c0 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
135d0 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
135e0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
135f0 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
13600 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
13610 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
13620 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
13630 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
13640 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
13650 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
13660 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
13670 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
13680 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
13690 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
136a0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
136b0 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
136c0 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
136d0 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
136e0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
136f0 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
13700 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
13710 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
13720 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
13730 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
13740 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
13750 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
13760 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
13770 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
13780 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
13790 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
137a0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
137b0 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
137c0 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
137d0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
137e0 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
137f0 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
13800 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
13810 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
13820 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
13830 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
13840 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
13850 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
13860 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
13870 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
13880 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
13890 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
138a0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
138b0 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
138c0 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
138d0 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
138e0 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
138f0 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
13900 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
13910 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
13920 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
13930 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
13940 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
13950 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
13960 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
13970 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
13980 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
13990 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
139a0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
139b0 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
139c0 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
139d0 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
139e0 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
139f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
13a00 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
13a10 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
13a20 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
13a30 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
13a40 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
13a50 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
13a60 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
13a70 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
13a80 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
13a90 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
13aa0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
13ab0 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
13ac0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
13ad0 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
13ae0 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
13af0 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
13b00 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
13b10 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
13b20 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
13b30 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
13b40 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
13b50 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
13b60 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
13b70 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
13b80 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
13b90 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
13ba0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
13bb0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
13bc0 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
13bd0 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
13be0 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
13bf0 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
13c00 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
13c10 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
13c20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
13c30 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
13c40 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
13c50 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
13c60 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
13c70 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
13c80 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
13c90 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
13ca0 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
13cb0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
13cc0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
13cd0 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
13ce0 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
13cf0 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
13d00 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
13d10 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
13d20 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
13d30 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
13d40 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
13d50 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
13d60 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13d70 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13d80 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
13d90 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
13da0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
13db0 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
13dc0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
13dd0 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
13de0 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
13df0 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
13e00 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
13e10 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
13e20 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
13e30 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
13e40 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
13e50 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
13e60 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
13e70 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
13e80 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
13e90 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
13ea0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
13eb0 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
13ec0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
13ed0 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
13ee0 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
13ef0 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
13f00 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
13f10 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
13f20 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
13f30 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
13f40 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
13f50 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
13f60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
13f70 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
13f80 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
13f90 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
13fa0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
13fb0 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
13fc0 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
13fd0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
13fe0 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
13ff0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
14000 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
14010 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
14020 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
14030 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
14040 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
14050 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
14060 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
14070 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
14080 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
14090 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
140a0 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
140b0 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
140c0 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
140d0 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
140e0 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
140f0 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
14100 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
14110 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
14120 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
14130 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
14140 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
14150 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
14160 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
14170 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
14180 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
14190 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
141a0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
141b0 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
141c0 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
141d0 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
141e0 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
141f0 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
14200 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
14210 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
14220 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
14230 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14240 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
14250 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
14260 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
14270 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
14280 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
14290 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
142a0 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
142b0 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
142c0 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
142d0 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
142e0 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
142f0 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
14300 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
14310 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
14320 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
14330 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
14340 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
14350 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
14360 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
14370 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
14380 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
14390 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
143a0 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
143b0 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
143c0 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
143d0 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
143e0 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
143f0 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
14400 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
14410 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
14420 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
14430 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
14440 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
14450 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
14460 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
14470 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
14480 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
14490 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
144a0 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
144b0 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
144c0 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
144d0 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
144e0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
144f0 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
14500 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
14510 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
14520 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
14530 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
14540 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
14550 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
14560 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
14570 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
14580 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
14590 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
145a0 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
145b0 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
145c0 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
145d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
145e0 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
145f0 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
14600 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
14610 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
14620 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
14630 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
14640 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
14650 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
14660 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
14670 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
14680 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
14690 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
146a0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
146b0 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
146c0 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
146d0 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
146e0 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
146f0 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
14700 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
14710 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
14720 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
14730 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
14740 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
14750 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
14760 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
14770 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
14780 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
14790 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
147a0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
147b0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
147c0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
147d0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
147e0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
147f0 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
14800 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
14810 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
14820 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
14830 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
14840 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
14850 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
14860 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
14870 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
14880 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
14890 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
148a0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
148b0 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
148c0 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  > rhs) */.  i8 r
148d0 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
148e0 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
148f0 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
14900 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
14910 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
14920 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
14930 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
14940 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
14950 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
14960 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
14970 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
14980 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
14990 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
149a0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
149b0 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
149c0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
149d0 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
149e0 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
149f0 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
14a00 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
14a10 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
14a20 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
14a30 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
14a40 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
14a50 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
14a60 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
14a70 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
14a80 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
14a90 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
14aa0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
14ab0 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
14ac0 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
14ad0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
14ae0 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
14af0 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
14b00 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
14b10 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
14b20 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
14b30 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
14b40 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
14b50 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
14b60 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
14b70 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
14b80 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
14b90 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
14ba0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
14bb0 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
14bc0 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
14bd0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
14be0 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
14bf0 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
14c00 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
14c10 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
14c20 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
14c30 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
14c40 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
14c50 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
14c60 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
14c70 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
14c80 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
14c90 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
14ca0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
14cb0 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
14cc0 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
14cd0 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
14ce0 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
14cf0 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
14d00 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
14d10 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
14d20 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
14d30 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
14d40 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
14d50 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
14d60 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
14d70 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
14d80 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
14d90 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
14da0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
14db0 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
14dc0 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
14dd0 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
14de0 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
14df0 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
14e00 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
14e10 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
14e20 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
14e30 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
14e40 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
14e50 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
14e60 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
14e70 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
14e80 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
14e90 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
14ea0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
14eb0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
14ec0 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
14ed0 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
14ee0 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
14ef0 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
14f00 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
14f10 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
14f20 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
14f30 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
14f40 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
14f50 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
14f60 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
14f70 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
14f80 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
14f90 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
14fa0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
14fb0 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
14fc0 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
14fd0 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
14fe0 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
14ff0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
15000 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
15010 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15020 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
15030 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
15040 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
15050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
15060 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
15070 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
15080 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
15090 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
150a0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
150b0 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
150c0 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
150d0 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
150e0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
150f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
15100 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
15110 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
15120 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
15130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
15140 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
15150 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
15160 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
15170 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
15180 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
15190 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
151a0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
151b0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
151c0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
151d0 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
151e0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
151f0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
15200 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
15210 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
15220 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
15230 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
15240 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
15250 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
15260 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
15270 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
15280 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
15290 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
152a0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
152b0 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
152c0 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
152d0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
152e0 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
152f0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
15300 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
15330 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
15340 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
15350 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
15360 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
15370 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
15380 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
15390 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
153a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
153b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
153c0 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
153d0 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
153e0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
153f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15400 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
15410 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
15420 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
15430 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
15440 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
15450 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
15460 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
15470 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
15480 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
15490 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
154a0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
154b0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
154c0 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
154d0 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
154e0 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
154f0 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
15500 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
15510 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
15520 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
15530 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
15540 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
15550 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
15560 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
15570 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
15580 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
15590 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
155a0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
155b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
155c0 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
155d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
155e0 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
155f0 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
15600 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
15610 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
15620 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
15630 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
15640 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
15650 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
15660 5f 73 74 61 74 31 20 2a 2f 0a 23 69 66 64 65 66  _stat1 */.#ifdef
15670 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
15680 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
15690 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
156a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
156b0 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
156c0 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
156d0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
156e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
156f0 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
15700 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
15710 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
15720 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
15730 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
15740 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
15750 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
15760 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
15770 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
15780 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
15790 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
157a0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
157b0 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
157c0 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
157d0 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
157e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
157f0 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
15800 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
15810 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
15820 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
15830 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  dex */.#endif.};
15840 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
15850 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
15860 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
15870 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15880 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
15890 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
158a0 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
158b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
158c0 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
158d0 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
158e0 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
158f0 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
15900 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15910 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
15920 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
15930 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
15940 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
15950 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
15960 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
15970 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
15980 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
15990 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
159a0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
159b0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
159c0 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
159d0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
159e0 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
159f0 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
15a00 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
15a10 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
15a20 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
15a30 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
15a40 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
15a50 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
15a60 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
15a70 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
15a80 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
15a90 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
15aa0 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
15ab0 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
15ac0 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
15ad0 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
15ae0 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
15af0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
15b00 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
15b10 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
15b20 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
15b30 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
15b40 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
15b50 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
15b60 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
15b70 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
15b80 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
15b90 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
15ba0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
15bb0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
15bc0 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
15bd0 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
15be0 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
15bf0 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
15c00 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
15c10 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
15c20 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
15c30 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
15c40 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
15c50 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
15c60 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
15c70 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
15c80 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
15c90 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
15ca0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
15cb0 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
15cc0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15cd0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
15ce0 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
15cf0 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
15d00 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
15d10 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
15d20 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
15d30 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
15d40 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
15d50 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
15d60 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
15d70 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
15d80 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
15d90 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
15da0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
15db0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
15dc0 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
15dd0 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
15de0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
15df0 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
15e00 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
15e10 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
15e20 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
15e30 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
15e40 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
15e50 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
15e60 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
15e70 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
15e80 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
15e90 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
15ea0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
15eb0 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
15ec0 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
15ed0 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
15ee0 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
15ef0 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
15f00 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
15f10 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
15f20 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
15f30 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
15f40 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
15f50 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
15f60 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
15f70 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
15f80 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
15f90 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
15fa0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
15fb0 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
15fc0 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
15fd0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
15fe0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
15ff0 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
16000 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
16010 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
16020 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
16030 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
16040 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
16050 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
16060 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
16070 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
16080 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
16090 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
160a0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
160b0 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
160c0 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
160d0 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
160e0 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
160f0 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
16100 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
16110 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
16120 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
16130 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
16140 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
16150 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
16160 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
16170 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
16180 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
16190 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
161a0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
161b0 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
161c0 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
161d0 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
161e0 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16200 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
16210 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
16220 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
16230 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
16240 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
16250 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
16260 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
16270 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
16280 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
162b0 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
162c0 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
162d0 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
162e0 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
162f0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
16300 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
16310 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
16320 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16330 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
16340 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
16350 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
16360 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
16370 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
16380 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
16390 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
163a0 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
163b0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
163c0 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
163d0 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
163e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
163f0 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
16400 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
16410 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
16420 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
16430 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
16440 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
16450 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
16460 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
16470 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
16480 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
16490 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
164a0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
164b0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
164c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
164d0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
164e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
164f0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
16500 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16510 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
16520 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
16530 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
16540 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16550 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
16560 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
16570 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
16580 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
16590 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
165a0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
165b0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
165c0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
165d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
165e0 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
165f0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16600 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16610 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
16620 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
16630 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
16640 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16650 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
16660 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
16670 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
166a0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
166b0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
166c0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
166f0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
16700 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
16710 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
16720 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
16730 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
16740 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
16750 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
16760 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
16770 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
16780 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
16790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
167a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
167b0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
167c0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
167d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
167e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
167f0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
16800 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
16810 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
16820 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
16830 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
16840 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
16850 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
16860 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
16870 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
16880 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16890 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
168a0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
168b0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
168c0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
168d0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
168e0 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
168f0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
16900 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
16910 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
16920 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
16930 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
16940 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
16950 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
16960 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
16970 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
16980 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
16990 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
169a0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
169b0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
169c0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
169d0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
169e0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
169f0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
16a00 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
16a10 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
16a20 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
16a30 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
16a40 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
16a50 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
16a60 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
16a70 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
16a80 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
16a90 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
16aa0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
16ab0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
16ac0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
16ad0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
16ae0 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
16af0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
16b00 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
16b10 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
16b20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
16b30 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
16b40 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
16b50 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
16b60 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
16b70 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
16b80 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
16b90 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
16ba0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
16bb0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
16bc0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
16bd0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
16be0 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
16bf0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
16c00 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
16c10 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
16c20 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
16c30 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
16c40 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
16c50 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
16c60 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
16c70 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
16c80 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
16c90 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
16ca0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
16cb0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
16cc0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
16cd0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
16ce0 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
16cf0 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  LOB,.** or TK_ST
16d00 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
16d10 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
16d20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
16d30 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
16d40 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
16d50 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
16d60 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
16d70 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
16d80 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76  ontains the.** v
16d90 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
16da0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
16db0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
16dc0 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
16dd0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
16de0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
16df0 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
16e00 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
16e10 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
16e20 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
16e30 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
16e40 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
16e50 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
16e60 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
16e70 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
16e80 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
16e90 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
16ea0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
16eb0 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
16ec0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
16ed0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
16ee0 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
16ef0 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
16f00 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
16f10 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
16f20 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
16f30 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
16f40 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
16f50 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
16f60 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
16f70 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
16f80 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
16f90 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
16fa0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
16fb0 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
16fc0 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
16fd0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
16fe0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
16ff0 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
17000 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
17010 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a   is.** valid..**
17020 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
17030 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
17040 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
17050 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
17060 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
17070 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
17080 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
17090 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
170a0 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
170b0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
170c0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
170d0 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
170e0 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
170f0 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
17100 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
17110 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
17120 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
17130 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
17140 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
17150 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
17160 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
17170 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
17180 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
17190 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
171a0 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
171b0 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
171c0 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
171d0 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
171e0 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
171f0 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
17200 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
17210 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17220 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
17230 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
17240 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63  estion mark.** c
17250 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
17260 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
17270 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
17280 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
17290 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72   index.** number
172a0 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
172b0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
172c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
172d0 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
172e0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
172f0 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
17300 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
17310 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
17320 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
17330 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
17340 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
17350 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
17360 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
17370 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
17380 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
17390 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
173a0 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
173b0 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
173c0 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
173d0 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
173e0 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
173f0 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
17400 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
17410 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
17420 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
17430 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
17440 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
17450 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
17460 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
17470 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
17480 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
17490 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
174a0 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
174b0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
174c0 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
174d0 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
174e0 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
174f0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
17500 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
17510 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
17520 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
17530 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
17540 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
17550 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
17560 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
17570 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
17580 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
17590 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
175a0 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
175b0 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
175c0 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
175d0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
175e0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
175f0 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
17600 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
17610 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
17620 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
17630 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
17640 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
17650 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
17660 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
17670 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
17680 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
17690 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
176a0 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
176b0 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
176c0 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
176d0 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
176e0 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
176f0 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
17700 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
17710 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
17720 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
17730 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
17740 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
17750 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
17760 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
17770 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
17780 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
17790 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
177a0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
177b0 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
177c0 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
177d0 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
177f0 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
17800 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
17810 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
17820 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
17830 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
17840 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
17850 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
17860 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17880 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
17890 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
178a0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
178b0 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
178c0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
178d0 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
178e0 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
178f0 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
17900 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
17910 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
17920 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
17930 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
17940 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
17950 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
17960 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
17970 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
17980 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
17990 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
179a0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
179b0 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
179c0 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
179d0 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
179e0 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
179f0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
17a00 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
17a10 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
17a20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17a30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17a40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17a50 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
17a60 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
17a70 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
17a80 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
17a90 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
17aa0 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
17ab0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
17ac0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
17ad0 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
17ae0 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
17af0 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
17b00 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
17b10 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
17b20 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
17b30 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
17b40 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
17b50 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
17b60 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
17b70 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
17b80 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
17b90 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
17ba0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
17bb0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
17bc0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
17bd0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
17be0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
17bf0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
17c00 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
17c10 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
17c20 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
17c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
17c70 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
17c80 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
17c90 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
17ca0 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
17cb0 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
17cc0 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
17cd0 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
17ce0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
17cf0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
17d00 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
17d10 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
17d20 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
17d30 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
17d40 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
17d50 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
17d80 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
17d90 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
17dc0 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
17dd0 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
17e00 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
17e10 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
17e20 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
17e30 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
17e40 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
17e50 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
17e60 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
17e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e80 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
17e90 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
17ea0 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
17ed0 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
17ee0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
17ef0 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
17f00 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
17f10 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
17f20 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
17f30 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
17f40 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
17f50 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
17f60 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
17f70 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
17f80 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
17f90 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17fb0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
17fc0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
17fd0 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
18000 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
18010 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
18040 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
18050 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
18060 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
18070 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
18080 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
18090 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
180a0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
180b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
180c0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
180d0 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
180e0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
180f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
18100 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
18110 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
18120 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
18130 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
18140 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
18150 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
18160 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
18170 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
18180 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
18190 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
181a0 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
181b0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
181c0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
181d0 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
181e0 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
181f0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
18200 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
18210 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
18220 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38       /* 0x000008
18230 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f   // available fo
18240 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  r use */.#define
18250 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
18260 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
18270 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
18280 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
18290 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
182a0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
182b0 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
182c0 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
182d0 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
182e0 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
182f0 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
18300 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
18310 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
18320 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
18330 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
18340 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
18350 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
18360 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
18370 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
18380 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
18390 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
183a0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
183b0 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
183c0 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
183d0 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
183e0 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
183f0 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
18400 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
18410 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
18420 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
18430 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
18440 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
18450 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
18460 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
18470 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
18480 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
18490 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
184a0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
184b0 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
184c0 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
184d0 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
184e0 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
184f0 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
18500 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
18510 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
18520 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
18530 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
18540 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
18550 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
18560 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
18570 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
18580 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
18590 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
185a0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
185b0 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
185c0 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
185d0 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
185e0 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
185f0 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
18600 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
18610 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
18620 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
18630 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
18640 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
18650 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
18660 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
18670 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
18680 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
18690 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
186a0 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
186b0 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
186c0 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
186d0 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
186e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
186f0 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
18700 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
18710 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
18720 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
18730 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
18740 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
18750 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
18760 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
18770 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
18780 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
18790 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
187a0 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
187b0 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
187c0 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20  #define EP_Leaf 
187d0 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a       0x800000 /*
187e0 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52   Expr.pLeft, .pR
187f0 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74  ight, .u.pSelect
18800 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a   all NULL */../*
18810 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73  .** Combinations
18820 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   of two or more 
18830 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64  EP_* flags.*/.#d
18840 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
18850 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
18860 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50  P_Subquery) /* P
18870 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62  ropagate these b
18880 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a  its up tree */..
18890 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
188a0 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
188b0 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
188c0 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
188d0 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
188e0 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
188f0 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
18900 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
18910 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
18920 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
18930 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
18940 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
18950 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
18960 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
18970 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
18980 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
18990 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
189a0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
189b0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
189c0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
189d0 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
189e0 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
189f0 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
18a00 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
18a10 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
18a20 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
18a30 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
18a40 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
18a50 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
18a60 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
18a70 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
18a80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
18a90 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
18aa0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
18ab0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
18ac0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
18ad0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
18ae0 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
18af0 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
18b00 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
18b10 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
18b20 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
18b30 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
18b40 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
18b50 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
18b60 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
18b70 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
18b80 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
18b90 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
18ba0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
18bb0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
18bc0 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
18bd0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
18be0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
18bf0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
18c00 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
18c10 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
18c20 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
18c30 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
18c40 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
18c50 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
18c60 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
18c70 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
18c80 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
18c90 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
18ca0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
18cb0 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
18cc0 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
18cd0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
18ce0 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
18cf0 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
18d00 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
18d10 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
18d20 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
18d30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
18d40 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
18d50 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
18d60 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
18d70 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
18d80 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
18d90 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
18da0 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
18db0 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
18dc0 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
18dd0 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
18de0 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
18df0 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
18e00 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
18e10 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
18e20 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
18e30 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
18e40 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
18e50 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
18e60 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
18e70 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
18e80 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
18e90 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
18ea0 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
18eb0 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
18ec0 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
18ed0 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
18ee0 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
18ef0 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
18f00 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
18f10 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
18f20 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
18f30 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
18f40 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
18f50 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
18f60 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
18f70 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
18f80 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
18f90 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
18fa0 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
18fb0 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
18fc0 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
18fd0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
18fe0 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
18ff0 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
19000 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
19010 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
19020 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
19030 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
19040 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
19050 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
19060 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
19070 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
19080 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
19090 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
190a0 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
190b0 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
190c0 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
190d0 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
190e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
190f0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
19100 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
19110 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   int nAlloc;    
19120 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19130 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20 61  r of a[] slots a
19140 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73 74  llocated */.  st
19150 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
19160 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
19170 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
19180 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
19190 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
191a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
191b0 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
191c0 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
191d0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
191e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
191f0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
19200 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
19210 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
19220 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
19230 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
19240 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
19250 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
19260 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
19270 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
19280 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
19290 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
192a0 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
192b0 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
192c0 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
192d0 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
192e0 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
192f0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
19300 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
19310 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
19320 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19330 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
19340 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
19350 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
19360 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
19370 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
19380 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
19390 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
193a0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
193b0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
193c0 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
193d0 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
193e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
193f0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
19400 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
19410 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
19420 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
19430 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
19440 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
19450 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
19460 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
19470 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
19480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19490 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
194a0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
194b0 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
194c0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
194d0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
194e0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
194f0 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
19500 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
19510 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
19520 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
19530 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
19540 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
19550 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
19560 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
19570 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
19580 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
19590 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
195a0 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
195b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
195c0 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
195d0 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
195e0 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
195f0 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
19600 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
19610 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
19620 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
19630 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
19640 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
19650 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
19660 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
19670 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
19680 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
19690 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
196a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
196b0 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
196c0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
196d0 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
196e0 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
196f0 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
19700 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
19710 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
19720 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
19730 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
19740 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
19750 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
19760 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
19770 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
19780 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
19790 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
197a0 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
197b0 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
197c0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
197d0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
197e0 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
197f0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
19800 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
19810 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
19820 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
19830 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
19840 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
19850 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
19860 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
19870 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
19880 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
19890 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
198a0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
198b0 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
198c0 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
198d0 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
198e0 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
198f0 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
19900 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
19910 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
19920 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
19930 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
19940 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
19950 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
19960 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
19970 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
19980 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
19990 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
199a0 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
199b0 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
199c0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
199d0 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
199e0 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
199f0 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
19a00 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
19a10 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
19a20 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
19a30 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
19a40 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
19a50 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74  BITMASK_TYPE.  t
19a60 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ypedef SQLITE_BI
19a70 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61  TMASK_TYPE Bitma
19a80 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
19a90 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
19aa0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
19ab0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
19ac0 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
19ad0 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
19ae0 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
19af0 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
19b00 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
19b10 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
19b20 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
19b30 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
19b40 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
19b50 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
19b60 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
19b70 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
19b80 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  nt)1)<<(n)).#def
19b90 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20  ine ALLBITS     
19ba0 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a   ((Bitmask)-1)..
19bb0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19bc0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
19bd0 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
19be0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
19bf0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
19c00 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
19c10 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
19c20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
19c30 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
19c40 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
19c50 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
19c60 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
19c70 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
19c80 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
19c90 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
19ca0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
19cb0 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
19cc0 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
19cd0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
19ce0 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
19cf0 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
19d00 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
19d10 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
19d20 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
19d30 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
19d40 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
19d50 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
19d60 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
19d70 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
19d80 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
19d90 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
19da0 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
19db0 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
19dc0 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
19dd0 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
19de0 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
19df0 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
19e00 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
19e10 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
19e20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
19e30 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
19e40 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
19e50 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
19e60 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
19e70 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
19e80 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
19e90 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
19ea0 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
19eb0 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
19ec0 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
19ed0 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
19ee0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
19ef0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
19f00 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
19f10 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
19f20 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
19f30 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
19f40 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
19f50 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
19f60 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
19f70 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
19f80 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
19f90 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
19fa0 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
19fb0 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
19fc0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
19fd0 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
19fe0 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
19ff0 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
1a000 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
1a010 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1a020 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
1a030 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
1a040 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1a050 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
1a060 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
1a070 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
1a080 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
1a090 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
1a0a0 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
1a0b0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1a0c0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
1a0d0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1a0e0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1a0f0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
1a100 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
1a110 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
1a120 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
1a130 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
1a140 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
1a150 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
1a160 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
1a170 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
1a180 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
1a190 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
1a1a0 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
1a1b0 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
1a1c0 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
1a1d0 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
1a1e0 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
1a1f0 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
1a200 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
1a210 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
1a220 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
1a230 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
1a240 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1a250 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
1a260 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
1a270 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
1a280 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
1a290 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
1a2a0 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
1a2b0 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ine */.    struc
1a2c0 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69  t {.      u8 joi
1a2d0 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
1a2e0 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
1a2f0 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61  een this table a
1a300 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1a310 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a320 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
1a330 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1a340 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
1a350 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
1a360 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1a370 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
1a380 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1a390 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
1a3a0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
1a3b0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
1a3c0 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
1a3d0 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
1a3e0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
1a3f0 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
1a400 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
1a410 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
1a420 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
1a430 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
1a440 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
1a450 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
1a460 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
1a470 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
1a480 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a490 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
1a4a0 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
1a4b0 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
1a4c0 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
1a4d0 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
1a4e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1a4f0 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
1a500 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
1a510 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
1a520 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
1a530 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
1a540 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
1a550 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1a560 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1a570 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1a580 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1a590 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1a5a0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1a5b0 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1a5c0 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1a5d0 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1a5e0 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1a5f0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1a600 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1a610 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1a620 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1a630 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1a640 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1a650 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1a660 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1a670 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1a680 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1a690 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1a6a0 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1a6b0 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1a6c0 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1a6d0 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1a6e0 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1a6f0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1a700 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1a710 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1a720 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1a730 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1a740 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1a750 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1a760 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1a770 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1a780 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1a790 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1a7a0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1a7b0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1a7c0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1a7d0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1a7e0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1a7f0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1a800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1a810 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1a820 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1a830 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1a840 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1a850 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1a860 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1a870 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1a880 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1a890 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1a8a0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1a8b0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1a8c0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1a8d0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1a8e0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1a8f0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1a900 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1a910 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1a920 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1a930 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1a940 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1a950 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1a960 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1a970 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1a980 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1a990 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1a9a0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1a9b0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1a9c0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1a9d0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1a9e0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1a9f0 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1aa00 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1aa10 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1aa20 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1aa30 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1aa40 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1aa50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1aa60 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1aa70 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1aa80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1aa90 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1aaa0 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1aab0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1aac0 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1aad0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1aae0 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1aaf0 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1ab00 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1ab10 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1ab20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ab30 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1ab40 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1ab50 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1ab60 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1ab70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1ab80 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1ab90 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1aba0 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1abb0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1abc0 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1abd0 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1abe0 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1abf0 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1ac00 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1ac10 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1ac20 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1ac30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1ac40 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1ac50 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1ac80 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1ac90 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1aca0 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1acb0 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1acc0 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1acd0 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1ace0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1acf0 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1ad00 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1ad10 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1ad20 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1ad30 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ad40 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1ad50 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1ad60 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1ad70 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1ad80 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1ad90 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1ada0 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1adb0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1adc0 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1add0 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1ade0 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1adf0 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1ae00 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1ae10 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1ae20 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1ae30 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1ae40 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1ae50 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1ae60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ae70 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1ae80 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1ae90 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1aea0 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aec0 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1aed0 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1aee0 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1aef0 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1af00 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1af10 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1af20 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1af30 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1af50 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1af60 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1af70 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1af80 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1af90 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1afa0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1afb0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1afc0 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1afd0 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1afe0 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1aff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b000 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1b010 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1b020 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1b030 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b040 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1b050 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1b060 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1b070 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b080 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1b090 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1b0a0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1b0b0 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1b0c0 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1b0d0 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1b0e0 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1b0f0 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1b100 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1b110 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1b120 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1b130 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1b140 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1b150 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1b160 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1b170 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1b180 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1b190 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1b1a0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1b1b0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1b1c0 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1b1d0 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1b1e0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1b1f0 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1b200 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1b210 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1b220 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1b230 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1b240 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1b250 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1b260 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1b270 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1b280 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1b290 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1b2a0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1b2b0 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1b2c0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1b2d0 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1b2e0 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1b2f0 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1b300 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1b310 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1b320 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1b330 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1b340 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1b350 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1b360 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1b370 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1b380 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1b390 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1b3a0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1b3b0 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1b3c0 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1b3d0 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1b3e0 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1b3f0 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1b400 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1b410 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1b420 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1b430 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1b440 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1b450 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1b460 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1b470 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1b480 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1b490 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1b4a0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1b4b0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1b4c0 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1b4d0 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1b4e0 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1b4f0 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1b500 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1b510 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1b520 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1b530 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1b540 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1b550 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1b560 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1b570 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1b580 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
1b590 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1b5a0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1b5b0 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1b5c0 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
1b5d0 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
1b5e0 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
1b5f0 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
1b600 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
1b610 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
1b620 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1b630 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1b640 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1b650 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1b660 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1b670 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b680 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1b690 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1b6a0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b6c0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1b6d0 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1b6e0 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1b6f0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1b700 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1b710 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1b720 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1b730 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1b740 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1b750 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1b760 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1b770 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1b780 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1b790 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1b7a0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1b7b0 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1b7c0 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e  F_HasAgg.**    N
1b7d0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  C_MinMaxAgg == S
1b7e0 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  F_MinMaxAgg == S
1b7f0 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1b800 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  X.**.*/.#define 
1b810 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
1b820 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
1b830 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1b840 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1b850 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
1b860 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  dx   0x0002  /* 
1b870 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1b880 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1b890 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1b8a0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1b8b0 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
1b8c0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
1b8d0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
1b8e0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1b8f0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
1b900 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
1b910 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
1b920 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
1b930 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
1b940 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
1b950 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0010  /* One or
1b960 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
1b970 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1b980 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
1b990 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
1b9a0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1b9b0 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
1b9c0 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
1b9d0 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c  define NC_VarSel
1b9e0 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41  ect 0x0040  /* A
1b9f0 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
1ba00 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  uery has been se
1ba10 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1ba20 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1ba30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1ba40 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1ba50 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1ba60 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1ba70 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1ba80 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1ba90 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1baa0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1bab0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1bac0 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1bad0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1bae0 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
1baf0 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
1bb00 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
1bb10 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
1bb20 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
1bb30 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
1bb40 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
1bb50 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
1bb60 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
1bb70 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
1bb80 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
1bb90 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1bba0 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
1bbb0 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
1bbc0 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
1bbd0 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
1bbe0 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
1bbf0 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
1bc00 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
1bc10 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
1bc20 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
1bc30 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
1bc40 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
1bc50 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1bc60 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1bc70 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1bc80 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1bc90 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1bca0 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1bcb0 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1bcc0 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1bcd0 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1bce0 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1bcf0 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1bd00 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1bd10 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1bd20 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1bd30 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1bd40 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1bd50 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1bd60 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1bd70 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1bd80 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1bd90 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1bda0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1bdb0 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1bdc0 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1bdd0 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1bde0 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1bdf0 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1be00 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1be10 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1be20 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1be30 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1be40 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1be50 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1be60 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1be70 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1be80 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1be90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1bea0 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1beb0 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1bec0 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1bed0 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1bee0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1bef0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1bf00 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1bf10 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1bf20 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1bf30 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1bf40 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1bf50 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1bf60 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1bf70 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1bf80 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1bf90 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1bfa0 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1bfb0 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1bfc0 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1bfd0 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1bfe0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
1bff0 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1c000 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
1c010 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
1c020 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
1c030 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
1c040 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
1c050 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1c060 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1c070 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1c080 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1c090 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1c0a0 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1c0b0 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1c0c0 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1c0d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1c0e0 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1c0f0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1c100 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1c110 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1c120 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1c130 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1c140 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1c150 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1c160 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1c170 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1c180 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1c190 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1c1a0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1c1b0 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1c1c0 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1c1d0 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1c1e0 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1c1f0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1c200 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1c210 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1c220 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1c230 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1c240 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1c250 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1c260 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1c270 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
1c280 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
1c290 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
1c2a0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1c2b0 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1c2c0 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1c2d0 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1c2e0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1c2f0 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1c300 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
1c310 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1c320 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1c330 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1c340 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1c350 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1c360 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1c370 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1c380 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1c390 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61  ()).**     SF_Ha
1c3a0 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48  sAgg     == NC_H
1c3b0 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f  asAgg.**     SF_
1c3c0 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43  MinMaxAgg  == NC
1c3d0 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d  _MinMaxAgg     =
1c3e0 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1c3f0 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46  NMAX.**     SF_F
1c400 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45  ixedLimit == WHE
1c410 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a  RE_USE_LIMIT.*/.
1c420 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
1c430 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30  nct       0x0000
1c440 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
1c450 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
1c460 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
1c470 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30  l            0x0
1c480 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
1c490 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
1c4a0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1c4b0 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30  Resolved       0
1c4c0 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  x00004  /* Ident
1c4d0 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
1c4e0 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
1c4f0 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
1c500 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20  e      0x00008  
1c510 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20  /* Contains agg 
1c520 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1c530 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1c540 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  ne SF_HasAgg    
1c550 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a       0x00010  /*
1c560 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1c570 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1c580 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1c590 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1c5a0 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  20  /* Uses the 
1c5b0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1c5c0 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1c5d0 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1c5e0 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71    0x00040  /* sq
1c5f0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1c600 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1c610 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1c620 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1c630 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d  0x00080  /* FROM
1c640 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1c650 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1c660 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1c670 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1c680 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0100  /* Part of
1c690 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1c6a0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1c6b0 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1c6c0 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00200  /* Synth
1c6d0 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1c6e0 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1c6f0 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1c700 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20  ue     0x00400  
1c710 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1c720 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1c730 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1c740 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1c750 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f  m     0x00800  /
1c760 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1c770 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1c780 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1c790 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1c7a0 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1c7b0 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1c7c0 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1c7d0 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1c7e0 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1c7f0 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1c800 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1c810 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1c820 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1c830 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1c840 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1c850 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1c860 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1c870 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1c880 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30  eConvert   0x080
1c890 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1c8a0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1c8b0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1c8c0 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1c8d0 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30  erted      0x100
1c8e0 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1c8f0 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1c900 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1c910 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1c920 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30  eHidden  0x20000
1c930 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1c940 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1c950 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  utput */.../*.**
1c960 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1c970 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1c980 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1c990 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1c9a0 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1c9b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1c9c0 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1c9d0 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1c9e0 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1c9f0 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1ca00 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1ca10 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1ca20 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1ca30 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1ca40 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1ca50 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1ca60 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1ca70 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1ca80 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1ca90 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1caa0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1cab0 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1cac0 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1cad0 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1cae0 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1caf0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1cb00 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1cb10 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1cb40 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1cb50 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1cb60 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1cb70 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1cb80 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cba0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1cbb0 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1cbc0 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1cbd0 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1cbe0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1cbf0 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1cc00 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1cc10 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1cc20 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1cc30 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1cc40 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1cc50 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1cc60 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1cc70 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1cc80 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1cc90 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1cca0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1ccb0 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1ccc0 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1ccf0 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1cd00 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1cd10 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1cd20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1cd30 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1cd40 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1cd50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cd60 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1cd70 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1cd80 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1cd90 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1cdb0 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1cdc0 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1cdd0 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1cde0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cdf0 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1ce00 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1ce10 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1ce20 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1ce30 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1ce40 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1ce50 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1ce60 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1ce70 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1ce80 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1ce90 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1cea0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1ceb0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1cee0 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1cef0 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1cf00 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1cf10 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1cf20 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1cf30 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1cf40 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1cf50 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1cf60 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1cf70 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1cf80 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1cf90 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1cfb0 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1cfc0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1cfd0 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cff0 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1d000 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1d010 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1d020 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1d030 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d040 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1d050 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d060 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1d090 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1d0a0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1d0b0 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1d0c0 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1d0d0 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1d100 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1d110 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1d120 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1d140 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1d150 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1d160 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1d170 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1d180 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1d190 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1d1a0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1d1b0 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1d1c0 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1d1d0 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1d1e0 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1d1f0 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1d200 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1d210 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1d220 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d230 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1d240 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1d250 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1d260 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1d270 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1d280 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d2a0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1d2b0 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1d2c0 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1d2f0 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1d300 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1d310 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1d320 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1d330 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1d340 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1d350 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1d360 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1d370 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d380 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3a0 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1d3b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1d3c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1d3d0 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1d3e0 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1d3f0 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1d400 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1d410 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1d420 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d430 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1d440 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1d450 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1d460 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1d470 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1d480 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1d490 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1d4a0 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1d4b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d4c0 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1d4d0 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1d4e0 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1d4f0 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1d500 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d510 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1d520 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1d530 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1d540 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1d550 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1d560 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1d570 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1d580 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d590 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1d5a0 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1d5b0 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1d5c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d5d0 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1d5e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1d5f0 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1d600 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1d610 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1d620 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1d630 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1d640 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1d650 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1d660 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1d670 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1d680 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1d690 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1d6a0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1d6b0 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1d6c0 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1d6d0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1d6e0 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1d6f0 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1d700 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1d710 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1d720 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1d730 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1d740 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1d750 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1d760 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1d770 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1d780 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1d790 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1d7a0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1d7b0 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1d7c0 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1d7d0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1d7e0 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1d7f0 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1d800 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1d810 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1d820 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1d830 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1d840 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1d850 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1d860 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1d870 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1d880 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1d890 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1d8a0 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1d8b0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1d8c0 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1d8d0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1d8e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1d8f0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1d900 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1d910 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1d920 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1d930 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1d940 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1d950 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1d960 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1d970 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1d980 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1d990 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1d9a0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1d9b0 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1d9c0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1d9d0 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1d9e0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1d9f0 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1da00 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1da10 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1da20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1da30 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1da40 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1da50 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1da60 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1da70 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1da80 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1da90 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1daa0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1dab0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1dac0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1dad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1dae0 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1daf0 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1db00 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1db10 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1db20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1db30 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1db40 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1db50 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1db60 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1db70 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1db80 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1db90 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1dba0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1dbb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1dbc0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1dbd0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1dbe0 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1dbf0 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1dc00 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1dc10 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45  ==SRT_Set */.  E
1dc20 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1dc30 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1dc40 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1dc50 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1dc60 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1dc70 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1dc80 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1dc90 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1dca0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1dcb0 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1dcc0 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1dcd0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1dce0 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1dcf0 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1dd00 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1dd10 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1dd20 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1dd30 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1dd40 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1dd50 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1dd60 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1dd70 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1dd80 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1dd90 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1dda0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1ddb0 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1ddc0 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1ddd0 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1dde0 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1ddf0 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1de00 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1de10 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1de20 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1de30 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1de40 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1de50 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1de60 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1de70 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1de80 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1de90 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1dea0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1deb0 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1dec0 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1ded0 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1dee0 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1def0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1df10 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1df20 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1df30 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1df40 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1df50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1df60 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1df70 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1df80 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1df90 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1dfa0 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1dfb0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1dfc0 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1dfd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1dfe0 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1dff0 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1e000 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1e010 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1e020 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1e030 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1e040 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1e050 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1e060 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1e070 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1e080 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1e090 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1e0a0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1e0b0 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1e0c0 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1e0d0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e0e0 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1e0f0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1e100 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1e110 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1e120 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1e130 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1e140 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1e150 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1e160 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1e170 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1e180 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1e190 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1e1a0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1e1b0 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1e1c0 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1e1d0 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1e1e0 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1e1f0 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1e200 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1e210 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1e220 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1e230 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1e240 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1e250 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1e260 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1e270 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1e280 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1e290 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1e2a0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1e2b0 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1e2c0 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1e2d0 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1e2e0 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1e2f0 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1e300 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1e310 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1e320 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1e330 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1e340 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1e350 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1e360 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1e370 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1e380 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1e390 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1e3a0 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1e3b0 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1e3c0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1e3d0 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1e3e0 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1e3f0 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1e400 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1e410 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1e420 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1e430 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1e440 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1e450 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1e460 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1e470 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1e480 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1e490 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1e4a0 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1e4b0 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1e4c0 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1e4d0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1e4e0 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1e4f0 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1e500 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1e510 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1e520 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1e530 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1e540 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1e550 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1e560 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1e570 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1e580 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1e590 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1e5a0 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1e5b0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1e5c0 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1e5d0 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1e5e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e5f0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1e600 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1e610 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1e620 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1e630 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1e640 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1e650 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1e660 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1e670 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1e680 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1e690 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1e6a0 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1e6b0 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1e6c0 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1e6d0 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1e6e0 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1e6f0 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1e700 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1e710 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1e720 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1e730 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1e740 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1e750 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1e760 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1e770 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1e780 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1e790 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1e7a0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1e7b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1e7c0 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1e7d0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1e7e0 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1e7f0 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1e800 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1e810 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1e820 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1e830 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1e840 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1e850 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1e860 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1e870 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1e880 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1e890 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1e8a0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1e8b0 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1e8c0 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1e8d0 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1e8e0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1e8f0 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1e900 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1e910 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1e920 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1e930 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1e940 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1e950 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1e960 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1e970 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1e980 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1e990 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1e9a0 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1e9b0 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1e9c0 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1e9d0 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1e9e0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1e9f0 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1ea00 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1ea10 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1ea20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1ea30 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1ea40 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1ea50 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1ea60 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1ea70 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1ea80 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1ea90 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1eaa0 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1eab0 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1eac0 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1ead0 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1eae0 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1eaf0 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1eb00 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1eb10 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1eb20 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1eb30 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eb50 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1eb60 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1eb70 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1eb80 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1eb90 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1eba0 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1ebb0 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1ebc0 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1ebd0 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1ebe0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1ebf0 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1ec00 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1ec10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ec20 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1ec30 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1ec40 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1ec50 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1ec60 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1ec70 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1ec80 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1ec90 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1eca0 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1ecb0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1ecc0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1ecd0 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1ece0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1ecf0 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1ed00 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1ed10 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1ed20 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1ed30 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1ed40 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1ed50 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1ed60 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1ed70 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1ed80 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1ed90 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1eda0 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1edb0 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1edc0 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1edd0 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1ede0 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1edf0 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1ee00 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f  bled */.  u8 nCo
1ee10 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
1ee20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1ee30 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
1ee40 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  [] */.  int nRan
1ee50 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1ee60 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1ee70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1ee80 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1ee90 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1eea0 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1eeb0 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1eec0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1eed0 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1eee0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eef0 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1ef00 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1ef10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ef20 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1ef30 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1ef40 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1ef50 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1ef60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ef70 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1ef80 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1ef90 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
1efa0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1efb0 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
1efc0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1efd0 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
1efe0 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
1eff0 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
1f000 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
1f010 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1f020 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
1f030 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1f040 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
1f050 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
1f060 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
1f070 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
1f080 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20   /* Table of an 
1f090 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72  index whose expr
1f0a0 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1f0b0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  d */.  int iCach
1f0c0 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1f0d0 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1f0e0 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1f0f0 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1f100 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1f110 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1f120 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1f130 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1f140 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1f150 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1f160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f170 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1f180 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1f190 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1f1a0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1f1b0 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
1f1c0 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1f1d0 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1f1e0 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1f1f0 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1f200 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1f210 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1f220 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1f230 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1f240 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1f250 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1f260 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1f270 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1f280 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1f290 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1f2a0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1f2b0 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1f2c0 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
1f2d0 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1f2e0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f2f0 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1f300 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1f310 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1f320 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1f330 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1f340 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1f350 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1f360 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1f370 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1f380 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1f390 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1f3a0 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1f3b0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1f3c0 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1f3d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1f3e0 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1f3f0 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1f400 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1f410 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1f420 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1f430 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1f440 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1f450 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f460 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1f470 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1f480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f490 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1f4a0 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1f4b0 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1f4c0 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1f4d0 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1f4e0 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1f4f0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1f500 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1f510 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1f520 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1f530 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1f540 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1f550 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1f560 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1f570 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1f580 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1f590 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1f5a0 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1f5b0 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1f5c0 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1f5d0 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1f5e0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1f5f0 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1f600 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1f610 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
1f620 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1f630 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1f640 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1f650 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1f660 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1f670 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1f680 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1f690 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1f6a0 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1f6b0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1f6c0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1f6d0 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1f6e0 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1f6f0 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1f700 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1f710 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1f720 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1f730 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1f740 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1f750 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1f760 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1f770 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1f780 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1f790 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1f7a0 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1f7b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
1f7f0 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65   ** Fields above
1f800 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
1f810 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54  ized to zero.  T
1f820 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66  he fields that f
1f830 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e  ollow,.  ** down
1f840 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   to the beginnin
1f850 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  g of the recursi
1f860 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e  ve section, do n
1f870 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20  ot need to be.  
1f880 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  ** initialized a
1f890 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73  s they will be s
1f8a0 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  et before being 
1f8b0 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64  used.  The bound
1f8c0 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65  ary is.  ** dete
1f8d0 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74  rmined by offset
1f8e0 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63  of(Parse,aColCac
1f8f0 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  he)..  *********
1f900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f940 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f  */..  struct yCo
1f950 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
1f960 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
1f970 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
1f980 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1f990 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   i16 iColumn;   
1f9a0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1f9b0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
1f9c0 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
1f9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
1f9e0 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
1f9f0 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
1fa00 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
1fa10 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
1fa20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
1fa30 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
1fa40 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
1fa50 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
1fa60 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
1fa70 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
1fa80 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
1fa90 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
1faa0 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
1fab0 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
1fac0 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
1fad0 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
1fae0 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
1faf0 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
1fb00 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
1fb10 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
1fb20 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  y */.  int aTemp
1fb30 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f  Reg[8];        /
1fb40 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1fb50 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1fb60 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65  isters */.  Toke
1fb70 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
1fb80 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1fb90 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1fba0 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1fbb0 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1fbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc00 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1fc10 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1fc20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1fc30 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1fc40 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1fc50 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1fc60 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1fc70 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1fc80 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1fc90 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1fca0 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1fcb0 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f  e,sLastToken) so
1fcc0 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20   the sLastToken 
1fcd0 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1fce0 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65  e.  ** first fie
1fcf0 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ld in the recurs
1fd00 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1fd10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd50 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e  ******/..  Token
1fd60 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1fd70 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1fd80 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  oken parsed */. 
1fd90 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
1fda0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1fdb0 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1fdc0 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1fdd0 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1fde0 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
1fdf0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
1fe00 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
1fe10 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1fe20 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
1fe30 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1fe40 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1fe50 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1fe60 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1fe70 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1fe80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1fe90 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1fea0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
1feb0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
1fec0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
1fed0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
1fee0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ff00 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
1ff10 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
1ff20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1ff30 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
1ff40 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
1ff50 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
1ff60 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
1ff70 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
1ff80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1ff90 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65  LAIN.  int iSele
1ffa0 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  ctId;           
1ffb0 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e   /* ID of curren
1ffc0 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50  t select for EXP
1ffd0 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20  LAIN output */. 
1ffe0 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74   int iNextSelect
1fff0 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Id;        /* Ne
20000 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c  xt available sel
20010 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41  ect ID for EXPLA
20020 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  IN output */.#en
20030 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c  dif.  VList *pVL
20040 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
20050 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65  /* Mapping betwe
20060 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  en variable name
20070 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f  s and numbers */
20080 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
20090 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
200a0 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
200b0 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
200c0 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
200d0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
200e0 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
200f0 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
20100 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
20110 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
20120 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
20130 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
20140 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
20150 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
20160 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
20170 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
20180 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
20190 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
201a0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
201b0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
201c0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
201d0 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
201e0 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
201f0 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
20200 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20210 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20220 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
20230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
20240 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
20250 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
20260 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
20270 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
20280 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
20290 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
202a0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
202b0 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
202c0 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
202d0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
202e0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
202f0 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
20300 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
20310 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
20320 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
20330 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
20340 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
20350 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
20360 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
20370 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
20380 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
20390 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
203a0 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
203b0 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
203c0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
203d0 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  arse */.};../*.*
203e0 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
203f0 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
20400 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
20410 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
20420 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
20430 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
20440 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20  e,aColCache) /* 
20450 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77  Recursive part w
20460 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23  /o aColCache*/.#
20470 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43  define PARSE_REC
20480 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66  URSE_SZ offsetof
20490 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65  (Parse,sLastToke
204a0 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69  n)    /* Recursi
204b0 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
204c0 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a  ne PARSE_TAIL_SZ
204d0 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d   (sizeof(Parse)-
204e0 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
204f0 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69  ) /* Non-recursi
20500 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
20510 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29  ne PARSE_TAIL(X)
20520 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50   (((char*)(X))+P
20530 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
20540 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
20550 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  tail */../*.** R
20560 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
20570 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
20580 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
20590 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
205a0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
205b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
205c0 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
205d0 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
205e0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
205f0 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
20600 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
20610 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
20620 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
20630 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
20640 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
20650 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
20660 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
20670 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
20680 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
20690 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
206a0 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
206b0 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
206c0 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
206d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
206e0 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
206f0 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
20700 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
20710 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
20720 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
20730 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
20740 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
20750 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
20760 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
20770 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
20780 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  codes..**.** Val
20790 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
207a0 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
207b0 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50  ert()):.**    OP
207c0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
207d0 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
207e0 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50  _LENGTH.**    OP
207f0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
20800 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
20810 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50  _TYPEOF.**    OP
20820 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
20830 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c    == BTREE_BULKL
20840 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  OAD.**    OPFLAG
20850 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d  _SEEKEQ       ==
20860 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a   BTREE_SEEK_EQ.*
20870 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44  *    OPFLAG_FORD
20880 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
20890 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20  E_FORDELETE.**  
208a0 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53    OPFLAG_SAVEPOS
208b0 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53  ITION == BTREE_S
208c0 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20  AVEPOSITION.**  
208d0 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45    OPFLAG_AUXDELE
208e0 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41  TE    == BTREE_A
208f0 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66  UXDELETE.*/.#def
20900 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
20910 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
20920 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53   /* OP_Insert: S
20930 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
20940 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20  >nChange */.    
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e   /* Also used in
20980 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20   P2 (not P5) of 
20990 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65  OP_Delete */.#de
209a0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
209b0 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
209c0 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
209d0 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
209e0 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
209f0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
20a00 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
20a10 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
20a20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
20a30 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20a40 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
20a50 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
20a60 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
20a70 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
20a80 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
20a90 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
20aa0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
20ab0 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
20ac0 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
20ad0 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
20ae0 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
20af0 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
20b00 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
20b10 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
20b20 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
20b30 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
20b40 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
20b50 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
20b60 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
20b70 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
20b80 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
20b90 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
20ba0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
20bb0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20bc0 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
20bd0 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
20be0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
20bf0 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
20c00 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
20c10 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
20c20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
20c30 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
20c40 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
20c50 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
20c60 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
20c70 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
20c80 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
20c90 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
20ca0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
20cb0 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
20cc0 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
20cd0 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
20ce0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
20cf0 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
20d00 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
20d10 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
20d20 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
20d30 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
20d40 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
20d50 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20d60 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
20d70 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
20d80 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20d90 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
20da0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
20db0 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
20dc0 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
20dd0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
20de0 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
20df0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
20e00 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
20e10 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a  ETE op */../*. *
20e20 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
20e30 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
20e40 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
20e50 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
20e60 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
20e70 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20  ct Trigger.. *. 
20e80 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
20e90 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
20ea0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
20eb0 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
20ec0 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
20ed0 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
20ee0 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
20ef0 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
20f00 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20  represents the. 
20f10 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
20f20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
20f30 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
20f40 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
20f50 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
20f60 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
20f70 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
20f80 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
20f90 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
20fa0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
20fb0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
20fc0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
20fd0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
20fe0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
20ff0 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
21000 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
21010 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
21020 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
21030 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
21040 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
21050 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
21060 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
21070 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
21080 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
21090 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
210a0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
210b0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
210c0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
210d0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
210e0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
210f0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
21100 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
21110 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
21120 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
21140 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
21150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
21160 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
21170 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
21180 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
21190 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
211a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
211b0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
211c0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
211d0 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
211e0 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
211f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
21200 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
21210 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
21220 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
21230 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21240 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
21250 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
21260 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
21270 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
21280 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
21290 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
212a0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
212b0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
212e0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
212f0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
21300 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
21310 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
21320 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
21330 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
21340 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
21350 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
21360 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
21370 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
21380 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
21390 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
213a0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
213b0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
213c0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
213d0 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
213e0 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
213f0 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
21400 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
21410 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
21420 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
21430 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
21440 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
21450 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
21460 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
21470 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49  e which..**.** I
21480 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
21490 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
214a0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
214b0 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
214c0 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
214d0 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
214e0 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
214f0 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
21500 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
21510 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
21520 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
21530 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
21540 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
21550 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
21560 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
21570 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
21580 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
21590 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
215a0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
215b0 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  am.. *. * Instan
215c0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
215d0 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
215e0 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
215f0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
21600 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
21610 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
21620 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
21630 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
21640 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a  member of the. *
21650 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
21660 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
21670 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
21680 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
21690 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
216a0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
216b0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
216c0 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65  ogram.. *. * The
216d0 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
216e0 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
216f0 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
21700 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
21710 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
21720 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
21730 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
21740 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
21750 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
21760 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20  by the. * value 
21770 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
21780 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
21790 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
217a0 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
217b0 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
217c0 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
217d0 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
217e0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
217f0 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
21800 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
21810 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
21820 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
21830 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
21840 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
21850 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
21860 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20  ULL.. * zTarget 
21870 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
21880 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
21890 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
218a0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
218b0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
218c0 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
218d0 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
218e0 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
218f0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
21900 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
21910 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
21920 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
21930 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
21940 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
21950 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
21960 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
21970 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20  S .... *        
21980 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
21990 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
219a0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
219b0 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
219c0 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
219d0 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
219e0 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
219f0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
21a00 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
21a10 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
21a20 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
21a30 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
21a40 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
21a50 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
21a60 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
21a70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
21a80 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
21a90 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28  se NULL.. *. * (
21aa0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
21ab0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21ac0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
21ad0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
21ae0 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
21af0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
21b00 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
21b10 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
21b20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
21b30 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
21b40 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
21b50 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
21b60 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
21b70 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
21b80 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
21b90 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
21ba0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
21bb0 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
21bc0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
21bd0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
21be0 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
21c00 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72  ment.. *. */.str
21c10 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
21c20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
21c30 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21c40 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
21c50 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21c60 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
21c70 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
21c80 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
21c90 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
21ca0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
21cb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
21cc0 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
21cd0 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
21ce0 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
21cf0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
21d00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
21d10 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
21d20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
21d30 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
21d40 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
21d50 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
21d60 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
21d70 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
21d80 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
21d90 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
21da0 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
21db0 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
21dc0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
21dd0 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
21de0 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
21df0 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
21e00 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
21e10 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
21e20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
21e30 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
21e40 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
21e50 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
21e60 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
21e70 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
21e80 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
21e90 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
21ea0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
21eb0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
21ec0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
21ed0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
21ee0 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
21ef0 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
21f00 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
21f10 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
21f20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
21f30 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
21f40 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
21f50 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
21f60 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
21f70 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
21f80 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
21f90 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
21fa0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
21fb0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
21fc0 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
21fd0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
21fe0 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
21ff0 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
22000 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
22010 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
22020 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
22030 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
22040 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
22050 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
22060 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
22070 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
22080 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
22090 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
220a0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
220b0 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
220c0 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
220d0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
220e0 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
220f0 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
22100 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
22110 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
22120 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
22130 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
22140 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
22150 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
22160 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
22170 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
22180 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
22190 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
221a0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
221b0 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
221c0 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
221d0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
221e0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
221f0 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
22200 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
22210 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
22220 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
22230 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
22240 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
22250 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
22260 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
22270 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
22280 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
22290 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
222a0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
222b0 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
222c0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
222d0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
222e0 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
222f0 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
22300 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
22310 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
22320 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
22330 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
22340 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
22350 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
22360 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
22370 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
22380 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
22390 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
223a0 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
223b0 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
223c0 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
223d0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
223e0 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
223f0 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
22400 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65  OOBIG  2.#define
22410 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
22420 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a  NTERNAL 0x01  /*
22430 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e   Internal-use-on
22440 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c  ly converters al
22450 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
22460 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
22470 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a  QLFUNC  0x02  /*
22480 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72   SQL function ar
22490 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69  guments to VXPri
224a0 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntf */.#define S
224b0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
224c0 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54  LOCED 0x04  /* T
224d0 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20  rue if xText is 
224e0 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
224f0 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61  */..#define isMa
22500 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29  lloced(X)  (((X)
22510 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20  ->printfFlags & 
22520 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
22530 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a  LLOCED)!=0).../*
22540 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
22550 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
22560 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
22570 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
22580 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
22590 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
225a0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
225b0 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
225c0 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
225d0 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
225e0 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
225f0 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
22600 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
22610 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
22620 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
22630 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
22640 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
22650 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
22660 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
22670 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
22680 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
22690 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
226a0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
226b0 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
226c0 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
226d0 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
226e0 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
226f0 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
22700 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
22710 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
22720 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
22730 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
22740 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
22750 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
22760 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
22770 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
22780 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
227b0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
227c0 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
227d0 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
227e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
227f0 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
22800 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
22810 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
22840 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
22850 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
22860 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
22870 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22880 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
22890 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
228a0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
228d0 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
228e0 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
228f0 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
22900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22910 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
22920 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
22930 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
22940 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
22950 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
22960 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
22970 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
22980 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
229a0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
229b0 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
229c0 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
229d0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
229e0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
229f0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
22a00 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
22a10 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22a30 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
22a40 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
22a50 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
22a60 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
22a70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
22a80 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
22a90 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
22aa0 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
22ab0 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
22ac0 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
22ad0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
22ae0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
22af0 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
22b00 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
22b10 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
22b20 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
22b30 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
22b40 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
22b50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
22b60 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
22b70 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
22b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b90 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
22ba0 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
22bb0 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
22be0 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
22bf0 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
22c00 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
22c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
22c20 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
22c30 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
22c40 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
22c50 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
22c60 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
22c70 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
22c80 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
22cb0 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
22cc0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
22ce0 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
22cf0 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
22d00 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
22d30 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
22d40 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
22d70 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
22d80 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
22db0 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
22dc0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
22dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22de0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
22df0 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
22e00 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
22e10 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22e30 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
22e40 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
22e50 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
22e60 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
22e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
22e80 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
22e90 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
22ea0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
22ed0 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
22ee0 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
22ef0 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
22f00 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
22f10 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
22f20 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
22f30 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
22f40 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
22f50 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
22f60 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
22f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22f80 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
22f90 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
22fa0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
22fb0 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22fd0 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
22fe0 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
22ff0 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23000 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23020 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23030 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23040 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
23050 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
23060 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23070 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
23080 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
23090 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
230a0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
230b0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
230c0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
230d0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
230e0 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23100 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
23110 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
23120 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23130 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
23140 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
23150 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
23160 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
23170 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
23180 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
23190 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
231a0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
231b0 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
231c0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
231d0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
231e0 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
231f0 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
23200 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
23210 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
23220 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
23230 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23240 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
23250 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
23260 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
23270 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
23280 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
23290 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
232a0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
232b0 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
232c0 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
232d0 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
232e0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
232f0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23300 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
23310 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
23320 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
23330 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
23340 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
23350 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
23360 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
23370 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
233a0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
233b0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
233c0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
233d0 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
233e0 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
233f0 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
23400 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23410 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
23420 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
23430 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
23440 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
23450 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
23460 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
23470 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
23480 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
23490 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
234a0 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d  ce counters */.}
234b0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
234c0 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
234d0 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
234e0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
234f0 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
23500 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
23510 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
23520 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
23530 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
23540 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
23550 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
23560 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
23570 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
23580 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
23590 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
235a0 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
235b0 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
235c0 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
235d0 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
235e0 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
235f0 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
23600 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
23610 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
23620 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
23630 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
23640 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
23650 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
23660 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
23670 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
23680 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
23690 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
236a0 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
236b0 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
236c0 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
236d0 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
236e0 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
236f0 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
23700 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
23710 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
23720 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
23730 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
23740 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
23750 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
23760 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
23770 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
237a0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
237b0 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
237c0 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
237d0 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
237e0 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
237f0 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
23800 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
23810 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
23820 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
23830 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
23840 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
23850 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
23860 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
23870 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
23880 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
23890 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
238a0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
238c0 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
238d0 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
238e0 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
23910 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
23920 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23950 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
23960 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
23970 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
23980 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
23990 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
239a0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
239b0 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
239e0 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
239f0 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
23a20 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
23a30 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
23a40 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
23a70 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
23a80 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
23a90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23aa0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
23ab0 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
23ac0 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
23ad0 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23af0 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
23b00 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
23b10 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
23b40 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
23b50 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
23b60 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
23b70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
23b80 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
23b90 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
23ba0 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
23bb0 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
23bc0 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
23bd0 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
23be0 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f 20  indexed expr to 
23bf0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
23c00 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
23c10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23c20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
23c30 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
23c40 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67 54    struct HavingT
23c50 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76 69  oWhereCtx *pHavi
23c60 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48  ngCtx;      /* H
23c70 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
23c80 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d  lause ctx */.  }
23c90 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
23ca0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
23cb0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
23cc0 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
23cd0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23ce0 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
23cf0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
23d00 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23d10 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
23d20 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23d30 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
23d40 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
23d50 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
23d60 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
23d70 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
23d80 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
23d90 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
23da0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
23db0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
23dc0 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
23dd0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69  r*, Select*);.#i
23de0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23df0 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  G.void sqlite3Se
23e00 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28  lectWalkAssert2(
23e10 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23e20 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
23e30 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
23e40 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
23e50 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
23e60 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
23e70 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
23e80 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
23e90 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
23ea0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
23eb0 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
23ec0 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
23ed0 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
23ee0 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
23ef0 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
23f00 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
23f10 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
23f20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
23f30 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
23f40 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
23f50 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
23f60 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
23f70 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
23f80 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
23f90 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
23fa0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
23fb0 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
23fc0 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
23fd0 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
23fe0 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24000 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
24010 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
24020 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
24030 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
24040 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
24050 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
24060 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
24070 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
240a0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
240b0 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
240c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
240e0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
240f0 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
24100 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
24110 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
24120 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
24130 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
24140 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
24150 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
24160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
24170 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
24180 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
24190 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
241a0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
241b0 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
241c0 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
241d0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
241e0 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
241f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
24200 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
24210 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
24220 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
24230 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
24240 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
24250 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
24260 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
24270 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
24280 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
24290 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
242a0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
242c0 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
242d0 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
242e0 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
242f0 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
24300 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
24310 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
24320 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
24330 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
24340 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
24350 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
24360 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
24370 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
24380 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
24390 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
243a0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
243b0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
243c0 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
243d0 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
243e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
243f0 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
24420 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
24450 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
24460 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
24470 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
24480 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
244c0 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
244d0 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
244e0 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
244f0 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
24500 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
24510 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
24520 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
24530 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
24540 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
24550 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
24560 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
24570 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
24580 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
24590 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
245a0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
245b0 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
245c0 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
245d0 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
245e0 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
245f0 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
24600 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
24610 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
24620 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
24630 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
24640 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
24650 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
24660 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
24670 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
24680 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
24690 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
246a0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
246b0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
246c0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
246d0 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
246e0 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
246f0 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
24700 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
24710 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
24720 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
24730 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
24740 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
24750 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
24760 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
24770 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
24780 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
24790 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
247a0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
247b0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
247c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
247d0 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
247e0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
247f0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
24800 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
24810 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
24820 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
24830 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
24840 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
24850 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
24860 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
24870 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
24880 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
24890 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
248a0 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
248b0 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
248c0 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
248d0 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
248e0 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
248f0 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
24900 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
24910 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
24920 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
24930 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
24940 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
24950 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
24960 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
24970 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24980 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
24990 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
249a0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
249b0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
249c0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
249d0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
249e0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
249f0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
24a00 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
24a10 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
24a20 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
24a30 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
24a40 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
24a50 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
24a60 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
24a70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24a80 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
24a90 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
24aa0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
24ab0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
24ac0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
24ad0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
24ae0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
24af0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
24b00 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
24b10 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
24b20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
24b30 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
24b40 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
24b50 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24b60 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
24b70 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
24b80 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
24b90 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
24ba0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
24bb0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
24bc0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
24bd0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24be0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
24bf0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
24c00 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
24c10 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
24c20 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
24c30 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
24c40 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
24c50 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
24c60 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
24c70 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
24c80 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
24c90 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
24ca0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
24cb0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
24cc0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
24cd0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
24ce0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24cf0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24d00 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
24d10 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
24d20 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
24d30 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24d40 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
24d50 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24d60 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
24d70 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24d80 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24d90 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
24da0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
24db0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
24dc0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24dd0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
24de0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24df0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
24e00 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24e10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24e20 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
24e30 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
24e40 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
24e50 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24e60 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
24e70 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24e80 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
24e90 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
24ea0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
24eb0 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
24ec0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
24ed0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
24ee0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24ef0 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
24f00 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24f10 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
24f20 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
24f30 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
24f40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24f50 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
24f60 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
24f70 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
24f80 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
24f90 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
24fa0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24fb0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24fc0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
24fd0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
24fe0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24ff0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
25000 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
25010 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25020 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
25030 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
25040 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
25050 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
25070 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
25080 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
25090 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
250a0 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
250b0 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
250c0 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
250d0 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
250e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
250f0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
25100 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
25110 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
25120 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
25130 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
25140 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
25150 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
25160 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
25170 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
25180 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
25190 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
251a0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
251b0 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
251c0 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
251d0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
251e0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
251f0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
25200 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
25210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
25220 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
25230 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
25240 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
25250 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
25260 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
25270 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
25280 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
25290 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
252a0 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
252b0 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
252c0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
252d0 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
252e0 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
252f0 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
25300 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
25310 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
25320 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
25330 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
25340 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25350 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
25360 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
25370 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
25380 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
25390 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
253a0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
253b0 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
253c0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
253d0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
253e0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
253f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
25400 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
25410 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
25420 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
25430 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
25440 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
25450 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
25460 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
25470 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
25480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
25490 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
254a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
254b0 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
254c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
254d0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
254e0 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
254f0 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
25500 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25510 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
25520 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
25530 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
25540 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
25550 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
25560 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
25570 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
25580 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
25590 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
255a0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
255b0 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
255c0 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
255d0 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
255e0 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
255f0 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
25600 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
25610 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
25620 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
25630 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
25640 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
25650 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
25660 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
25670 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
25680 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
25690 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
256a0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
256b0 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
256c0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
256d0 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
256e0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
256f0 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
25700 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
25710 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25720 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
25730 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
25740 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
25750 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
25760 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
25770 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25780 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
25790 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
257a0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
257b0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
257c0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
257d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
257e0 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
257f0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
25800 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
25810 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
25820 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
25830 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
25840 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
25850 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
25860 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
25870 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
25880 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
25890 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
258a0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
258b0 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
258c0 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
258d0 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
258e0 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
258f0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
25900 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
25910 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
25920 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
25930 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
25940 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
25950 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
25960 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
25970 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
25980 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
25990 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
259a0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
259b0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
259c0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
259d0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
259e0 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
259f0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
25a00 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
25a10 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
25a20 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
25a30 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
25a40 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
25a50 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
25a60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
25a70 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
25a80 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
25a90 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
25aa0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
25ab0 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
25ac0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25ad0 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
25ae0 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
25af0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
25b00 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
25b10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
25b20 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
25b30 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
25b40 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
25b50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25b60 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
25b70 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
25b80 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
25b90 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
25ba0 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
25bb0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25bc0 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
25bd0 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
25be0 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
25bf0 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
25c00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25c10 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
25c20 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
25c30 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
25c40 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25c50 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
25c60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
25c70 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
25c80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
25c90 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
25ca0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
25cb0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
25cc0 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
25cd0 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
25ce0 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
25cf0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
25d00 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
25d10 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
25d20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25d30 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
25d40 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
25d50 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
25d60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25d70 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
25d80 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
25d90 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
25da0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
25db0 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
25dc0 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20  ues */.};..void 
25dd0 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
25de0 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
25df0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
25e00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  ;.void sqlite3XP
25e10 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
25e20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
25e30 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
25e40 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
25e50 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
25e60 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
25e70 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
25e80 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25e90 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
25ea0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
25eb0 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
25ec0 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
25ed0 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
25ee0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
25ef0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
25f00 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
25f10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
25f20 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
25f30 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
25f40 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
25f50 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
25f60 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
25f70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
25f80 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
25f90 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
25fa0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
25fb0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61  qlite3TreeViewBa
25fc0 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  reExprList(TreeV
25fd0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
25fe0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
25ff0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26000 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
26010 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
26020 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
26030 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
26040 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26050 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
26060 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26070 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
26080 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
26090 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
260a0 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
260b0 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
260c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
260d0 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
260e0 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
260f0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
26100 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
26110 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26120 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
26130 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
26140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f  ;.void sqlite3To
26150 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63  kenInit(Token*,c
26160 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
26170 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
26180 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
26190 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
261a0 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
261b0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
261c0 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
261d0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
261e0 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
261f0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
26200 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
26210 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
26220 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
26230 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
26240 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
26250 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
26260 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
26270 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
26280 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
26290 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
262a0 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
262b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
262c0 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
262d0 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50  NoTempsInRange(P
262e0 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
262f0 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c  #endif.Expr *sql
26300 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
26310 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
26320 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
26330 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
26340 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
26350 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
26360 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
26370 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
26380 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
26390 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
263a0 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
263b0 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
263c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
263d0 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74  e3PExprAddSelect
263e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
263f0 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a  Select*);.Expr *
26400 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
26410 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
26420 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
26430 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
26440 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26450 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
26460 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
26470 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
26480 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b  e*, Expr*, u32);
26490 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
264a0 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
264b0 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
264c0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
264d0 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
264e0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
264f0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26500 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
26510 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c  ndVector(Parse*,
26520 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74  ExprList*,IdList
26530 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
26540 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
26550 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c  tSortOrder(ExprL
26560 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ist*,int);.void 
26570 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
26580 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
26590 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
265a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
265b0 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
265c0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
265d0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
265e0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
265f0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
26600 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
26610 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
26620 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
26630 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
26640 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
26650 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
26660 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
26670 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
26680 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
26690 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
266a0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
266b0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
266c0 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
266d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
266e0 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
266f0 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
26700 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
26710 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
26720 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
26730 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
26740 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
26750 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
26760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
26770 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
26780 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
26790 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
267a0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
267b0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
267c0 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
267d0 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
267e0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
267f0 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
26800 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
26810 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
26820 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
26830 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
26840 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
26850 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26860 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
26870 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
26880 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
26890 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
268a0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
268b0 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
268c0 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
268d0 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
268e0 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
268f0 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
26900 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
26910 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
26920 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
26930 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
26940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26950 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
26960 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
26970 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
26980 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
26990 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
269a0 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
269b0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
269c0 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
269d0 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
269e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
269f0 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
26a00 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
26a10 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
26a20 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
26a30 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
26a40 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
26a50 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
26a60 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
26a70 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26a80 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
26a90 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
26aa0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
26ab0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
26ac0 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
26ad0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
26ae0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
26af0 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
26b00 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  e*,ExprSpan*);.v
26b10 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
26b20 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
26b30 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26b40 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
26b50 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26b60 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
26b70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
26b80 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
26b90 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
26ba0 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bc0 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
26bd0 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
26be0 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
26bf0 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
26c00 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26c10 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26c20 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64  E_UNTESTABLE.# d
26c30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
26c40 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
26c50 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
26c60 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
26c70 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
26c80 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
26c90 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
26ca0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
26cb0 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
26cc0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
26cd0 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c  itvecTestNotNull
26ce0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
26cf0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
26d00 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
26d10 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
26d20 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
26d30 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
26d40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
26d50 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
26d60 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
26d70 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
26d80 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ec*);.#ifndef SQ
26d90 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
26da0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
26db0 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
26dc0 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
26dd0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
26de0 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
26df0 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
26e00 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
26e10 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
26e20 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
26e30 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
26e40 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
26e50 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
26e60 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
26e70 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
26e80 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26e90 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
26ea0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
26eb0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
26ec0 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
26ed0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
26ee0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
26ef0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
26f00 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
26f10 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
26f20 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
26f30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
26f40 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
26f50 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
26f60 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
26f70 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26f80 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
26f90 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
26fa0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
26fb0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
26fc0 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
26fd0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
26fe0 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
26ff0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
27000 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
27010 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
27020 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27030 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
27040 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27050 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27060 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
27070 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
27080 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27090 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
270a0 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
270b0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
270c0 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
270d0 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
270e0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
270f0 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
27100 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
27110 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
27120 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
27130 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27140 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
27150 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
27160 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
27170 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27180 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
27190 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
271a0 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
271b0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
271c0 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
271d0 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
271e0 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
271f0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
27200 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
27210 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
27220 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
27230 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
27240 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
27250 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
27260 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
27270 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
27280 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
27290 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
272a0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
272b0 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
272c0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
272d0 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
272e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
272f0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
27300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
27330 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
27340 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
27350 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
27360 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
27370 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
27380 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27390 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
273a0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
273b0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
273c0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
273d0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
273e0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
273f0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
27400 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
27410 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
27420 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27430 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
27440 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
27450 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
27460 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
27470 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
27480 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
27490 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
274a0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
274b0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
274c0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
274d0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
274e0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
274f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
27500 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
27510 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
27520 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
27530 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27550 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
27560 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
27570 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
27580 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
27590 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
275a0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
275b0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
275c0 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
275d0 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
275e0 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
275f0 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
27600 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27620 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
27630 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
27640 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
27650 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
27660 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
27670 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
27680 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
27690 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
276a0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
276b0 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
276c0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
276d0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
276e0 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
276f0 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
27700 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
27710 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
27720 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
27730 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
27740 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
27750 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
27760 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
27770 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
27780 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
27790 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
277a0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
277b0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
277c0 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
277d0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
277e0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
277f0 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
27800 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27810 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
27820 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
27830 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
27840 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
27850 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
27860 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
27870 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27880 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
27890 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
278a0 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
278b0 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
278c0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
278d0 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
278e0 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
278f0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
27900 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
27910 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
27920 33 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e  3WhereOrderedInn
27930 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f  erLoop(WhereInfo
27940 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27950 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
27960 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27970 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
27980 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
27990 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
279a0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
279b0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
279c0 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
279d0 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
279e0 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
279f0 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
27a00 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
27a10 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
27a20 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
27a30 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
27a40 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
27a50 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
27a60 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
27a70 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
27a80 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
27a90 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
27aa0 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
27ab0 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
27ac0 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
27ad0 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
27ae0 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
27af0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
27b00 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
27b10 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
27b20 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
27b30 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
27b40 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
27b50 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
27b60 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61  etColumnToReg(Pa
27b70 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
27b80 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
27b90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27ba0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
27bb0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
27bc0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27bd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27be0 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
27bf0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27c00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27c10 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
27c20 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
27c30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27c40 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
27c50 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
27c60 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
27c70 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  p(Parse*);.void 
27c80 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
27c90 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  Remove(Parse*, i
27ca0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27cb0 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
27cc0 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f  lear(Parse*);.vo
27cd0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27ce0 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67  cheAffinityChang
27cf0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
27d00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27d10 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
27d20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
27d30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27d40 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20  odeCopy(Parse*, 
27d50 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27d60 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27d70 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73  eFactorable(Pars
27d80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
27d90 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27da0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
27db0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27dc0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27dd0 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
27de0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
27df0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27e00 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
27e10 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27e20 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27e30 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
27e40 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27e50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
27e60 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
27e70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27e80 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
27e90 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
27ea0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
27eb0 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
27ec0 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
27ed0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
27ee0 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
27ef0 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
27f00 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
27f10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
27f20 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
27f30 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
27f40 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
27f50 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  yCol */.#define 
27f60 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54  SQLITE_ECEL_OMIT
27f70 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d  REF  0x08  /* Om
27f80 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75  it if ExprList.u
27f90 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
27fa0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
27fb0 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
27fc0 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
27fd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27fe0 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
27ff0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
28000 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28010 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28  3ExprIfFalseDup(
28020 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28030 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
28040 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
28050 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
28060 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28070 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f  ar*);.#define LO
28080 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30  CATE_VIEW    0x0
28090 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  1.#define LOCATE
280a0 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61  _NOERR   0x02.Ta
280b0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
280c0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75  teTable(Parse*,u
280d0 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63  32 flags,const c
280e0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
280f0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
28100 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
28110 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  m(Parse*,u32 fla
28120 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  gs,struct SrcLis
28130 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
28140 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
28150 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
28160 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
28170 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28180 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
28190 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
281a0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
281b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
281c0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
281d0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
281e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
281f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
28200 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  m(Parse*,Token*)
28210 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
28220 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
28230 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63  qlite3*, int);.c
28240 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
28250 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
28260 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
28270 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
28280 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  are(Parse*,Expr*
28290 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
282a0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
282b0 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c  mpareSkip(Expr*,
282c0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
282d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
282e0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
282f0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
28300 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28310 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
28320 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
28330 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
28340 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
28350 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
28360 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
28370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28380 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
28390 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
283a0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
283b0 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65  qlite3ExprCovere
283c0 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20  dByIndex(Expr*, 
283d0 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20  int iCur, Index 
283e0 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69  *pIdx);.int sqli
283f0 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
28400 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
28410 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
28420 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
28430 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
28440 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
28450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
28460 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
28470 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
28480 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
28490 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
284a0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
284b0 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
284c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
284d0 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
284e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
284f0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
28500 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
28510 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
28520 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
28530 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
28540 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
28550 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28560 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74  e3CommitTransact
28570 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
28580 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
28590 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  kTransaction(Par
285a0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
285b0 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73  e3Savepoint(Pars
285c0 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29  e*, int, Token*)
285d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c  ;.void sqlite3Cl
285e0 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71  oseSavepoints(sq
285f0 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73  lite3 *);.void s
28600 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78  qlite3LeaveMutex
28610 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73  AndCloseZombie(s
28620 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
28630 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28640 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ant(Expr*);.int 
28650 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
28660 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70  stantNotJoin(Exp
28670 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28680 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
28690 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20  Function(Expr*, 
286a0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
286b0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72  ExprIsConstantOr
286c0 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
286d0 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  Expr*, ExprList*
286e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
286f0 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e  prIsTableConstan
28700 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69  t(Expr*,int);.#i
28710 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28720 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
28730 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28740 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28  ontainsSubquery(
28750 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Expr*);.#endif.i
28760 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28770 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69  Integer(Expr*, i
28780 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
28790 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63  3ExprCanBeNull(c
287a0 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74  onst Expr*);.int
287b0 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64   sqlite3ExprNeed
287c0 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67  sNoAffinityChang
287d0 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63  e(const Expr*, c
287e0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
287f0 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63  3IsRowid(const c
28800 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
28810 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65  te3GenerateRowDe
28820 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a  lete(.    Parse*
28830 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a  ,Table*,Trigger*
28840 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36  ,int,int,int,i16
28850 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a  ,u8,u8,u8,int);.
28860 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65  void sqlite3Gene
28870 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65  rateRowIndexDele
28880 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  te(Parse*, Table
28890 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
288a0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
288b0 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
288c0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
288d0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
288e0 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c  nt, int*,Index*,
288f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28900 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
28910 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74  Label(Parse*,int
28920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
28930 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
28940 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
28950 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69  able*,int*,int,i
28960 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20  nt,int,int,.    
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28990 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c   u8,u8,int,int*,
289a0 69 6e 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  int*);.#ifdef SQ
289b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c  LITE_ENABLE_NULL
289c0 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c  _TRIM.  void sql
289d0 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
289e0 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a  dP5(Vdbe*,Table*
289f0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28a00 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  e sqlite3SetMake
28a10 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65  RecordP5(A,B).#e
28a20 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
28a30 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69  3CompleteInserti
28a40 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  on(Parse*,Table*
28a50 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
28a60 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  *,int,int,int);.
28a70 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  int sqlite3OpenT
28a80 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50  ableAndIndices(P
28a90 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
28aa0 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a  nt, u8, int, u8*
28ab0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
28ac0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
28ad0 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
28ae0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
28af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
28b00 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
28b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
28b20 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
28b30 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
28b40 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
28b50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
28b60 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
28b70 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
28b80 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
28b90 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
28ba0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
28bb0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
28bc0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
28bd0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
28be0 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
28bf0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
28c00 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
28c10 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
28c20 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
28c30 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
28c40 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
28c50 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
28c60 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
28c70 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
28c80 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
28c90 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
28ca0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
28cb0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
28cc0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
28cd0 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71  _ENABLED.void sq
28ce0 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
28cf0 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74  me(Select*,const
28d00 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
28d10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28d20 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42  electSetName(A,B
28d30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
28d40 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74  lite3InsertBuilt
28d50 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a  inFuncs(FuncDef*
28d60 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a  ,int);.FuncDef *
28d70 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74  sqlite3FindFunct
28d80 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ion(sqlite3*,con
28d90 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c  st char*,int,u8,
28da0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
28db0 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e  3RegisterBuiltin
28dc0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
28dd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
28de0 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e  isterDateTimeFun
28df0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
28e00 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
28e10 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42  erPerConnectionB
28e20 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
28e30 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
28e40 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
28e50 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
28e60 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
28e70 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
28e80 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
28e90 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
28ea0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
28eb0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
28ec0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
28ed0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
28ee0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
28ef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
28f00 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
28f10 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
28f20 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
28f30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
28f40 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
28f50 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
28f60 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
28f70 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
28f80 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
28f90 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
28fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fb0 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
28fc0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28fd0 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
28fe0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
28ff0 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
29000 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
29010 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
29020 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
29030 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29040 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
29050 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
29060 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
29070 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
29080 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
29090 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
290a0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
290b0 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
290c0 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
290d0 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
290e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
290f0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
29100 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
29110 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
29120 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29140 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
29150 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
29160 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
29170 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
29180 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
29190 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
291a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
291b0 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
291c0 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
291d0 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
291e0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
291f0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29200 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
29210 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
29220 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
29230 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29240 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
29250 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
29260 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29270 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
29280 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
29290 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
292a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292c0 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
292d0 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
292e0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
292f0 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
29300 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
29310 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
29320 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
29330 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29340 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
29350 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
29360 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
29370 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
29380 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
29390 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
293a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
293b0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
293c0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
293d0 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
293e0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
293f0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
29400 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
29410 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
29420 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
29430 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
29440 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
29450 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
29460 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64  level : (p)).# d
29470 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54  efine sqlite3IsT
29480 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
29490 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23  >pToplevel==0).#
294a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
294b0 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
294c0 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a  st(B,C,D,E,F) 0.
294d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
294e0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
294f0 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
29500 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
29510 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
29520 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
29530 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c  DeleteTrigger(A,
29540 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71  B,C).# define sq
29550 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
29560 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ger(A,B,C,D,E,F,
29570 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20  G,H,I).# define 
29580 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
29590 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c  iggerDirect(A,B,
295a0 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e  C,D,E,F).# defin
295b0 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
295c0 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64  List(X, Y) 0.# d
295d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72  efine sqlite3Par
295e0 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a  seToplevel(p) p.
295f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29600 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a  IsToplevel(p) 1.
29610 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29620 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41  TriggerColmask(A
29630 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a  ,B,C,D,E,F,G) 0.
29640 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
29650 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73  te3JoinType(Pars
29660 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
29670 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  n*, Token*);.voi
29680 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  d sqlite3CreateF
29690 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
296a0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  , ExprList*, Tok
296b0 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  en*, ExprList*, 
296c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
296d0 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65  e3DeferForeignKe
296e0 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  y(Parse*, int);.
296f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29700 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f  MIT_AUTHORIZATIO
29710 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
29720 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c  AuthRead(Parse*,
29730 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72  Expr*,Schema*,Sr
29740 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73  cList*);.  int s
29750 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28  qlite3AuthCheck(
29760 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73  Parse*,int, cons
29770 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29780 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
29790 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
297a0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
297b0 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f  h(Parse*, AuthCo
297c0 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68  ntext*, const ch
297d0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
297e0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
297f0 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29  op(AuthContext*)
29800 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41  ;.  int sqlite3A
29810 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65  uthReadCol(Parse
29820 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
29830 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
29840 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  nt);.#else.# def
29850 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52  ine sqlite3AuthR
29860 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64  ead(a,b,c,d).# d
29870 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29880 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  hCheck(a,b,c,d,e
29890 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  )    SQLITE_OK.#
298a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
298b0 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61  uthContextPush(a
298c0 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73  ,b,c).# define s
298d0 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
298e0 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29  tPop(a)  ((void)
298f0 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  (a)).#endif.void
29900 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50   sqlite3Attach(P
29910 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
29920 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
29930 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28  d sqlite3Detach(
29940 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
29950 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49  void sqlite3FixI
29960 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61  nit(DbFixer*, Pa
29970 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  rse*, int, const
29980 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   char*, const To
29990 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
299a0 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46  e3FixSrcList(DbF
299b0 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ixer*, SrcList*)
299c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
299d0 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c  Select(DbFixer*,
299e0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
299f0 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62  qlite3FixExpr(Db
29a00 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  Fixer*, Expr*);.
29a10 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
29a20 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  prList(DbFixer*,
29a30 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
29a40 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67   sqlite3FixTrigg
29a50 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c  erStep(DbFixer*,
29a60 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
29a70 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28  int sqlite3AtoF(
29a80 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64  const char *z, d
29a90 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29  ouble*, int, u8)
29aa0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
29ab0 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72  Int32(const char
29ac0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73   *, int*);.int s
29ad0 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74  qlite3Atoi(const
29ae0 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
29af0 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
29b00 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
29b10 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
29b20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
29b30 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
29b40 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
29b50 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
29b60 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
29b70 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
29b80 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
29b90 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
29ba0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
29bb0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
29bc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
29bd0 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
29be0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
29bf0 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
29c00 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
29c10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
29c20 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
29c30 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
29c40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
29c50 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
29c60 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  T4) || \.    def
29c70 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c  ined(SQLITE_EXPL
29c80 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f  AIN_ESTIMATED_RO
29c90 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  WS).u64 sqlite3L
29ca0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
29cb0 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74  t);.#endif.VList
29cc0 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64   *sqlite3VListAd
29cd0 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74  d(sqlite3*,VList
29ce0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
29cf0 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68  t,int);.const ch
29d00 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  ar *sqlite3VList
29d10 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a  NumToName(VList*
29d20 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
29d30 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d  e3VListNameToNum
29d40 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  (VList*,const ch
29d50 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a  ar*,int);../*.**
29d60 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
29d70 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
29d80 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
29d90 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
29da0 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
29db0 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
29dc0 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
29dd0 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
29de0 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
29df0 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
29e00 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
29e10 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
29e20 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
29e30 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
29e40 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
29e50 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
29e60 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
29e70 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
29e80 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
29e90 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
29ea0 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
29eb0 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
29ec0 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
29ed0 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
29ee0 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
29ef0 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
29f00 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
29f10 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
29f20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
29f30 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
29f40 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
29f50 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
29f60 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
29f70 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
29f80 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
29f90 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
29fa0 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
29fb0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
29fc0 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
29fd0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
29fe0 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
29ff0 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
2a000 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
2a010 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
2a020 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
2a030 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
2a040 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
2a050 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
2a060 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
2a070 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
2a080 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
2a090 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2a0a0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2a0b0 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49  yStr(sqlite3*, I
2a0c0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2a0d0 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
2a0e0 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
2a0f0 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
2a100 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
2a110 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
2a120 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
2a130 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2a140 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
2a150 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
2a160 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
2a170 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41  ite3TableColumnA
2a180 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69  ffinity(Table*,i
2a190 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
2a1a0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
2a1b0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2a1c0 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
2a1d0 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
2a1e0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2a1f0 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
2a200 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
2a210 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
2a220 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
2a230 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2a240 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
2a250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2a260 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2a270 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a280 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74  ystemError(sqlit
2a290 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
2a2a0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
2a2b0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2a2c0 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
2a2d0 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
2a2e0 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
2a2f0 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
2a300 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
2a310 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
2a320 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
2a330 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
2a340 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
2a350 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a360 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
2a370 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
2a380 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
2a390 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a3a0 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
2a3b0 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
2a3c0 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
2a3d0 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
2a3e0 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
2a3f0 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53  har*,int);.CollS
2a400 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
2a410 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2a420 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2a430 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
2a440 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
2a450 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2a460 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2a470 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
2a480 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2a490 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2a4a0 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2a4b0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2a4c0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2a4d0 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2a4e0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2a4f0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2a500 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2a510 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2a520 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2a530 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2a540 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2a550 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2a560 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2a570 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2a580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2a590 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2a5a0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2a5b0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2a5c0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2a5d0 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2a5e0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2a5f0 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2a600 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2a610 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2a620 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2a630 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2a640 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2a650 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2a660 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2a670 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2a680 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2a690 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2a6a0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2a6b0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2a6c0 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2a6d0 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2a6e0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2a6f0 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2a700 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2a710 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2a720 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2a730 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2a740 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2a750 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2a760 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2a770 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2a780 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2a790 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2a7a0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2a7b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2a7c0 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2a7d0 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
2a7e0 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2a7f0 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2a800 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  e3 *);.char *sql
2a810 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2a820 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2a830 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  id*, int, u8);.i
2a840 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2a850 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2a860 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2a870 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2a880 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2a890 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2a8a0 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2a8b0 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2a8c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2a8d0 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2a8e0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2a8f0 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2a900 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2a910 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2a920 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2a930 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2a940 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a950 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2a960 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2a970 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2a980 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2a990 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2a9a0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2a9b0 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2a9c0 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2a9d0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2a9e0 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2a9f0 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2aa00 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2aa10 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2aa20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2aa30 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2aa40 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2aa50 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2aa60 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2aa70 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2aa80 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2aa90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2aaa0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2aab0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2aac0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aad0 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2aae0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2aaf0 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2ab00 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2ab10 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2ab20 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2ab30 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
2ab40 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
2ab50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2ab60 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2ab70 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2ab80 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2ab90 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2aba0 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2abb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2abc0 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2abd0 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  se*, Expr *, int
2abe0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2abf0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2ac00 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2ac10 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2ac20 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2ac30 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2ac40 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2ac50 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2ac60 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2ac70 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2ac80 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ac90 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2aca0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2acb0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2acc0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2acd0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2ace0 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2acf0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2ad00 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2ad10 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2ad20 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2ad30 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2ad40 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2ad50 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2ad60 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2ad70 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2ad80 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2ad90 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2ada0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2adb0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2adc0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2add0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2ade0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2adf0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2ae00 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2ae10 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2ae20 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2ae30 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2ae40 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2ae50 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2ae60 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2ae70 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2ae80 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
2ae90 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2aea0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2aeb0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2aec0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2aed0 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2aee0 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
2aef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2af00 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2af10 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2af20 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2af30 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2af40 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
2af50 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
2af60 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2af70 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2af80 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
2af90 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2afa0 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
2afb0 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
2afc0 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
2afd0 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
2afe0 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
2aff0 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
2b000 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
2b010 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
2b020 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b030 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
2b040 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2b050 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
2b060 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
2b070 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
2b080 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b090 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
2b0a0 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
2b0b0 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
2b0c0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
2b0d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b0e0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
2b0f0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
2b100 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
2b110 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
2b120 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
2b130 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b140 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
2b150 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2b160 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2b170 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
2b180 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b190 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
2b1a0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
2b1b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2b1c0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
2b1d0 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
2b1e0 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
2b1f0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
2b200 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
2b210 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2b220 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
2b230 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  d *,.  void (*)(
2b240 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2b250 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2b260 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
2b270 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2b280 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2b290 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
2b2a0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2b2b0 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
2b2c0 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
2b2d0 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c  ctor.);.void sql
2b2e0 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2b2f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2b300 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2b310 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b320 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2b330 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2b340 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2b350 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2b360 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2b370 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2b380 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2b390 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2b3a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b3b0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
2b3c0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b3d0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
2b3e0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b3f0 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
2b400 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
2b410 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
2b420 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
2b430 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68  m*,int,char);.ch
2b440 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2b450 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2b460 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2b470 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
2b480 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b490 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2b4a0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
2b4b0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
2b4c0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
2b4d0 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
2b4e0 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
2b4f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
2b500 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
2b510 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
2b520 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
2b530 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
2b540 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
2b550 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
2b560 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66   u8 *);..#ifndef
2b570 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42   SQLITE_OMIT_SUB
2b580 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65  QUERY.int sqlite
2b590 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72  3ExprCheckIN(Par
2b5a0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c  se*, Expr*);.#el
2b5b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b5c0 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78  te3ExprCheckIN(x
2b5d0 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  ,y) SQLITE_OK.#e
2b5e0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2b5f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2b600 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2b610 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2b620 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2b630 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2b640 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2b650 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2b660 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2b670 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2b680 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2b690 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2b6a0 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2b6b0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2b6c0 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2b6d0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2b6e0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2b6f0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2b700 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2b710 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2b720 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2b730 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2b740 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2b750 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2b760 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2b770 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2b780 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2b790 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2b7a0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2b7b0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2b7c0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2b7d0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2b7e0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2b7f0 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f 69  (*)(u64));.  voi
2b800 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2b810 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2b820 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2b830 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2b840 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2b850 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
2b860 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2b870 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2b880 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2b890 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2b8a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2b8b0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2b8c0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2b8d0 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2b8e0 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2b8f0 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2b900 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2b910 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2b920 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2b930 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2b940 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2b950 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2b960 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2b970 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2b980 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2b990 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2b9a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2b9b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2b9c0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2b9d0 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2b9e0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2b9f0 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2ba00 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2ba10 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2ba20 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2ba30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2ba40 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2ba50 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2ba60 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2ba70 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2ba80 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2ba90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2baa0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2bab0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bac0 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2bad0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bae0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2baf0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2bb00 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2bb10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bb20 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2bb30 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bb40 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2bb50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bb60 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2bb70 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2bb80 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2bb90 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2bba0 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2bbb0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2bbc0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2bbd0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2bbe0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2bbf0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2bc00 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2bc10 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2bc20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2bc30 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2bc40 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2bc50 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2bc60 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2bc70 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2bc80 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2bc90 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2bca0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2bcb0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2bcc0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2bcd0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2bce0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2bcf0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2bd00 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2bd10 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2bd20 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2bd30 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2bd40 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2bd50 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2bd60 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2bd70 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2bd80 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2bd90 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2bda0 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2bdb0 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2bdc0 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2bdd0 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2bde0 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2bdf0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2be00 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2be10 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2be20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2be30 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2be40 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2be50 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2be60 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2be70 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2be80 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2be90 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2bea0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2beb0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2bec0 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2bed0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2bee0 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2bef0 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2bf00 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2bf10 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2bf20 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2bf30 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2bf40 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2bf50 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2bf60 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2bf70 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2bf80 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2bf90 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2bfa0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2bfb0 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2bfc0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2bfd0 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2bfe0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2bff0 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2c000 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c010 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2c020 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2c030 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2c040 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2c050 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2c060 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2c070 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2c080 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2c090 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2c0a0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2c0b0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c0c0 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2c0d0 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
2c0e0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
2c0f0 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
2c100 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2c110 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2c120 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
2c130 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
2c140 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
2c150 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2c160 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
2c170 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
2c180 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
2c190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
2c1a0 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
2c1b0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
2c1c0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
2c1d0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2c1e0 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
2c1f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
2c200 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
2c210 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2c220 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
2c230 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2c240 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
2c250 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
2c260 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
2c270 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
2c280 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
2c290 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
2c2a0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
2c2b0 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
2c2c0 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
2c2d0 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
2c2e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c2f0 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
2c300 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
2c310 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
2c320 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
2c330 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
2c340 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
2c350 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
2c360 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
2c370 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2c380 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
2c390 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
2c3a0 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
2c3b0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2c3c0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
2c3d0 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
2c3e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
2c3f0 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
2c400 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
2c410 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
2c420 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2c430 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
2c440 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
2c450 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
2c460 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
2c470 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2c480 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2c490 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2c4a0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2c4b0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2c4c0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2c4d0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2c4e0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2c4f0 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2c500 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2c510 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2c520 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2c530 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2c540 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2c550 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2c560 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2c570 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2c580 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2c590 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2c5a0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2c5b0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2c5c0 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2c5d0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2c5e0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2c5f0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2c600 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2c610 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2c620 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2c630 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2c640 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2c650 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2c660 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2c670 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2c680 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2c690 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2c6a0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2c6b0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2c6c0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2c6d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2c6e0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2c6f0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2c700 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2c710 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2c720 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2c730 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2c740 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2c750 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2c760 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2c770 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2c780 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2c790 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2c7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2c7b0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2c7c0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2c7d0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2c7e0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2c7f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2c800 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2c810 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c820 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2c830 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2c840 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2c850 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2c860 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2c870 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2c880 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2c890 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2c8a0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2c8b0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2c8c0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2c8d0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2c8e0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2c8f0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2c900 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2c910 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2c920 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2c930 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2c940 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2c950 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2c960 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2c970 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2c980 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2c990 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2c9a0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2c9b0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2c9c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2c9d0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2c9e0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2c9f0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2ca00 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2ca10 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2ca20 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2ca30 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2ca40 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2ca50 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2ca60 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2ca70 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2ca80 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2ca90 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2caa0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2cab0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2cac0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2cad0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2cae0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2caf0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2cb00 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2cb10 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2cb20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2cb30 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2cb40 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2cb50 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2cb60 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2cb70 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2cb80 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2cb90 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2cba0 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2cbb0 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2cbc0 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2cbd0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2cbe0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2cbf0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2cc00 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2cc10 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2cc20 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2cc30 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2cc40 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2cc50 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2cc60 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2cc70 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cc80 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2cc90 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2cca0 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2ccb0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2ccc0 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2ccd0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2cce0 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2ccf0 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2cd00 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2cd10 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2cd20 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2cd30 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2cd40 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2cd50 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2cd60 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2cd70 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2cd80 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2cd90 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2cda0 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2cdb0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2cdc0 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2cdd0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2cde0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2cdf0 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2ce00 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2ce10 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2ce20 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2ce30 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2ce40 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2ce50 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
2ce60 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2ce70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2ce80 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2ce90 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2cea0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2ceb0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2cec0 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2ced0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2cee0 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
2cef0 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ITE.  int sqlite
2cf00 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73  3JournalCreate(s
2cf10 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2cf20 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69  #endif..int sqli
2cf30 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65  te3JournalIsInMe
2cf40 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c  mory(sqlite3_fil
2cf50 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e *p);.void sqli
2cf60 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65  te3MemJournalOpe
2cf70 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  n(sqlite3_file *
2cf80 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2cf90 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64  ExprSetHeightAnd
2cfa0 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61  Flags(Parse *pPa
2cfb0 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23  rse, Expr *p);.#
2cfc0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
2cfd0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
2cfe0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2cff0 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20  prHeight(Select 
2d000 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2d010 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74  3ExprCheckHeight
2d020 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
2d030 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2d040 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72  qlite3SelectExpr
2d050 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64  Height(x) 0.  #d
2d060 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2d070 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79  rCheckHeight(x,y
2d080 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71  ).#endif..u32 sq
2d090 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f  lite3Get4byte(co
2d0a0 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73  nst u8*);.void s
2d0b0 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75  qlite3Put4byte(u
2d0c0 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65  8*, u32);..#ifde
2d0d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2d0e0 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
2d0f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2d100 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71  ectionBlocked(sq
2d110 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33  lite3 *, sqlite3
2d120 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
2d130 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2d140 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64  ocked(sqlite3 *d
2d150 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  b);.  void sqlit
2d160 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2d170 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2d180 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2d190 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d1a0 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20  onBlocked(x,y). 
2d1b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d1c0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2d1d0 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20  ed(x).  #define 
2d1e0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d1f0 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69  nClosed(x).#endi
2d200 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
2d210 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  _DEBUG.  void sq
2d220 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
2d230 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b  (FILE*, char *);
2d240 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
2d250 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  f the SQLITE_ENA
2d260 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73  BLE IOTRACE exis
2d270 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62  ts then the glob
2d280 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73  al variable.** s
2d290 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73  qlite3IoTrace is
2d2a0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
2d2b0 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74  printf-like rout
2d2c0 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70  ine used to.** p
2d2d0 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67  rint I/O tracing
2d2e0 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69   messages..*/.#i
2d2f0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2d300 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66  LE_IOTRACE.# def
2d310 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20  ine IOTRACE(A)  
2d320 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61  if( sqlite3IoTra
2d330 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54  ce ){ sqlite3IoT
2d340 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64  race A; }.  void
2d350 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2d360 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53  aceSql(Vdbe*);.S
2d370 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45  QLITE_API SQLITE
2d380 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51  _EXTERN void (SQ
2d390 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69  LITE_CDECL *sqli
2d3a0 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73  te3IoTrace)(cons
2d3b0 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65  t char*,...);.#e
2d3c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54  lse.# define IOT
2d3d0 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65  RACE(A).# define
2d3e0 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
2d3f0 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66  aceSql(X).#endif
2d400 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f  ../*.** These ro
2d410 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c  utines are avail
2d420 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d  able for the mem
2d430 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65  2.c debugging me
2d440 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a  mory allocator.*
2d450 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72  * only.  They ar
2d460 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79  e used to verify
2d470 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20   that different 
2d480 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72  "types" of memor
2d490 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  y.** allocations
2d4a0 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72   are properly tr
2d4b0 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73  acked by the sys
2d4c0 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  tem..**.** sqlit
2d4d0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2d4e0 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79  e() sets the "ty
2d4f0 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61  pe" of an alloca
2d500 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a  tion to one of.*
2d510 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20  * the MEMTYPE_* 
2d520 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62  macros defined b
2d530 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20  elow.  The type 
2d540 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73  must be a bitmas
2d550 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67  k with.** a sing
2d560 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  le bit set..**.*
2d570 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2d580 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72  gHasType() retur
2d590 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f  ns true if any o
2d5a0 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74  f the bits in it
2d5b0 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75  s second.** argu
2d5c0 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74  ment match the t
2d5d0 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70  ype set by the p
2d5e0 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d  revious sqlite3M
2d5f0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2d600 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  ..** sqlite3Memd
2d610 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73  ebugHasType() is
2d620 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73   intended for us
2d630 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28  e inside assert(
2d640 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  ) statements..**
2d650 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2d660 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75  bugNoType() retu
2d670 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65  rns true if none
2d680 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2d690 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2d6a0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2d6b0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2d6c0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2d6d0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2d6e0 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70  ()..**.** Perhap
2d6f0 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72  s the most impor
2d700 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68  tant point is th
2d710 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2d720 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41  ween MEMTYPE_HEA
2d730 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45  P.** and MEMTYPE
2d740 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20  _LOOKASIDE.  If 
2d750 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73  an allocation is
2d760 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2d770 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a  DE, that means.*
2d780 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20  * it might have 
2d790 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62  been allocated b
2d7a0 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63  y lookaside, exc
2d7b0 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69  ept the allocati
2d7c0 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61  on was.** too la
2d7d0 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  rge or lookaside
2d7e0 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c   was already ful
2d7f0 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74  l.  It is import
2d800 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  ant to verify.**
2d810 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e   that allocation
2d820 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  s that might hav
2d830 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64  e been satisfied
2d840 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72   by lookaside ar
2d850 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20  e not.** passed 
2d860 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b  back to non-look
2d870 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75  aside free() rou
2d880 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20  tines.  Asserts 
2d890 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65  such as the.** e
2d8a0 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65  xample above are
2d8b0 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e   placed on the n
2d8c0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2d8d0 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20  e() routines to 
2d8e0 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63  verify.** this c
2d8f0 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a  onstraint..**.**
2d900 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20   All of this is 
2d910 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64  no-op for a prod
2d920 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49  uction build.  I
2d930 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74  t only comes int
2d940 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74  o.** play when t
2d950 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  he SQLITE_MEMDEB
2d960 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  UG compile-time 
2d970 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a  option is used..
2d980 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2d990 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64  _MEMDEBUG.  void
2d9a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d9b0 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  SetType(void*,u8
2d9c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2d9d0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2d9e0 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2d9f0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2da00 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  NoType(void*,u8)
2da10 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2da20 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2da30 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a  SetType(X,Y)  /*
2da40 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69   no-op */.# defi
2da50 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2da60 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20  ugHasType(X,Y)  
2da70 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  1.# define sqlit
2da80 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2da90 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66  (X,Y)   1.#endif
2daa0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2dab0 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31  _HEAP       0x01
2dac0 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61    /* General hea
2dad0 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  p allocations */
2dae0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2daf0 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32  _LOOKASIDE  0x02
2db00 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d    /* Heap that m
2db10 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c  ight have been l
2db20 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66  ookaside */.#def
2db30 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41  ine MEMTYPE_SCRA
2db40 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20  TCH    0x04  /* 
2db50 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69  Scratch allocati
2db60 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2db70 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20  EMTYPE_PCACHE   
2db80 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20    0x08  /* Page 
2db90 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  cache allocation
2dba0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65  s */../*.** Thre
2dbb0 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a  ading interface.
2dbc0 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
2dbd0 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
2dbe0 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  >0.int sqlite3Th
2dbf0 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74  readCreate(SQLit
2dc00 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28  eThread**,void*(
2dc10 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29  *)(void*),void*)
2dc20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  ;.int sqlite3Thr
2dc30 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68  eadJoin(SQLiteTh
2dc40 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a  read*, void**);.
2dc50 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69  #endif..#if defi
2dc60 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2dc70 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c  E_DBSTAT_VTAB) |
2dc80 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
2dc90 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74  _TEST).int sqlit
2dca0 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72  e3DbstatRegister
2dcb0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64  (sqlite3*);.#end
2dcc0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  if..int sqlite3E
2dcd0 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78  xprVectorSize(Ex
2dce0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2dcf0 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63  sqlite3ExprIsVec
2dd00 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29  tor(Expr *pExpr)
2dd10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56  ;.Expr *sqlite3V
2dd20 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70  ectorFieldSubexp
2dd30 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45  r(Expr*, int);.E
2dd40 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2dd50 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50  ForVectorField(P
2dd60 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  arse*,Expr*,int)
2dd70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65  ;.void sqlite3Ve
2dd80 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72  ctorErrorMsg(Par
2dd90 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 63 6f  se*, Expr*);..co
2dda0 6e 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74  nst char **sqlit
2ddb0 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73  e3CompileOptions
2ddc0 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 0a 23  (int *pnOpt);..#
2ddd0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
2dde0 4e 54 5f 48 20 2a 2f 0a                          NT_H */.