/ Hex Artifact Content
Login

Artifact fc7b2516260c4e14bd4342cd9ed47f3d0ca27cc5:


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 6e 63 6c  ite..**.*/.#incl
01b0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
01c0: 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 49  #ifndef _SQLITEI
01d0: 4e 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53  NT_H_.#define _S
01e0: 51 4c 49 54 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a  QLITEINT_H_../*.
01f0: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0200: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0210: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0220: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
0230: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
0240: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0250: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
0260: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
0270: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
0280: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0290: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
02a0: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
02b0: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
02c0: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
02d0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
02e0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
02f0: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0300: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0310: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0320: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0330: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0340: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0350: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0360: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0370: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0380: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0390: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
03a0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
03b0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
03c0: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
03d0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
03e0: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
03f0: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0400: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0410: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0420: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0430: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0440: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0450: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0460: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0470: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0480: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0490: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
04a0: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
04b0: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
04c0: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
04d0: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
04e0: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
04f0: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0500: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0510: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0520: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0530: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0540: 53 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72  S..**.** Similar
0550: 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63   is true for Mac
0560: 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f   OS X.  LFS is o
0570: 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  nly supported on
0580: 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20   Mac OS X 9 and 
0590: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05a0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
05b0: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
05c0: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
05d0: 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45  1.# ifndef _FILE
05e0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20  _OFFSET_BITS.#  
05f0: 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46   define _FILE_OF
0600: 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65  FSET_BITS 64.# e
0610: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c  ndif.# define _L
0620: 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20  ARGEFILE_SOURCE 
0630: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0640: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
0650: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
0660: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
0670: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
0680: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
0690: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
06a0: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
06b0: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
06c0: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
06d0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
06e0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
06f0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
0700: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
0710: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
0720: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
0730: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
0740: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
0750: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
0760: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
0770: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
0780: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
0790: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
07b0: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
07c0: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
07d0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
07e0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
07f0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
0800: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
0810: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
0820: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
0830: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
0840: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
0850: 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72  f../* Needed for
0860: 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74   various definit
0870: 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64  ions... */.#ifnd
0880: 65 66 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ef _GNU_SOURCE.#
0890: 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55   define _GNU_SOU
08a0: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  RCE.#endif..#if 
08b0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
08c0: 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  D__) && !defined
08d0: 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20  (_BSD_SOURCE).# 
08e0: 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52  define _BSD_SOUR
08f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
0900: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
0910: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
0920: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
0930: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
0940: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
0950: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
0960: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
0970: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
0980: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
0990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
09a0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
09b0: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
09c0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
09d0: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
09e0: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
09f0: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
0a00: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
0a10: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
0a20: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
0a30: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
0a40: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
0a50: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
0a60: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
0a70: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
0a80: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
0a90: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
0aa0: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
0ab0: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
0ac0: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
0ad0: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
0ae0: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
0af0: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
0b00: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
0b10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0b20: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0b30: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
0b40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
0b50: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
0b60: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
0b70: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
0b80: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
0b90: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0ba0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0bb0: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
0bc0: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
0bd0: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
0be0: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
0bf0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0c00: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
0c10: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
0c20: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
0c30: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
0c40: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
0c50: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
0c60: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
0c70: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
0c80: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
0c90: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
0ca0: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
0cb0: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
0cc0: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
0ce0: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
0cf0: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
0d00: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
0d10: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
0d20: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
0d30: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0d40: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
0d50: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
0d60: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
0d70: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
0d80: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
0d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
0da0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
0db0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0dc0: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
0dd0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0de0: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
0df0: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
0e00: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
0e10: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
0e20: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
0e30: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
0e40: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
0e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
0e60: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
0e70: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
0e80: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
0e90: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
0ea0: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
0eb0: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
0ee0: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
0ef0: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
0f00: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
0f10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0f20: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
0f30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0f40: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0f50: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
0f60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
0f70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
0f80: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
0f90: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
0fa0: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
0fb0: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
0fc0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
0fd0: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
0fe0: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
0ff0: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1000: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1010: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
1020: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
1030: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
1040: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
1050: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1060: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
1070: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1080: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1090: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
10a0: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
10b0: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
10c0: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
10e0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
10f0: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1100: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1110: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
1120: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
1130: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
1140: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
1150: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1160: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
1170: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1180: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1190: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
11a0: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
11b0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
11c0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
11d0: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
11e0: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
11f0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1200: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1210: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1220: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1230: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1240: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1250: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1260: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1270: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1280: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1290: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
12a0: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
12b0: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
12c0: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
12d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12e0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12f0: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1300: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1310: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1320: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1330: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1340: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1350: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1360: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1370: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1380: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1390: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
13a0: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
13b0: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
13c0: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
13d0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
13e0: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
13f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1400: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1420: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1430: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1440: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1460: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1470: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1480: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1490: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
14b0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
14c0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
14d0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
14e0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
14f0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1500: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1510: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1520: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1530: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1540: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1550: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1560: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1570: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1580: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1590: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
15a0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
15b0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
15c0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
15d0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
15e0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
15f0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1600: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1610: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1620: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1630: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1640: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1650: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1660: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1670: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1680: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1690: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
16a0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
16b0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
16c0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
16d0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
16e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
16f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1700: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1710: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1720: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1730: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1740: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1750: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1760: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1770: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1780: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1790: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
17a0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17b0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
17c0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
17d0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
17e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
17f0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1800: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
1810: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
1820: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
1830: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
1840: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
1850: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1860: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1870: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
1880: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
1890: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18a0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18b0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18c0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
18d0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
18e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
18f0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
1900: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1910: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1930: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1950: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1960: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1970: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1980: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1990: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
19a0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
19b0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
19c0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
19d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
19e0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
19f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1a00: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1a10: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1a20: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1a30: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1a40: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1a50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1a60: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1a70: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1a80: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
1a90: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
1aa0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
1ab0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1ac0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1ad0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1ae0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
1af0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b00: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
1b10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
1b20: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
1b30: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
1b40: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1b50: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
1b70: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
1b80: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
1b90: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
1ba0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
1bb0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
1bc0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
1bd0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
1be0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
1bf0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
1c00: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
1c10: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
1c20: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
1c30: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
1c40: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
1c50: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
1c60: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
1c70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1c80: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1c90: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
1ca0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
1cb0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
1cc0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
1cd0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
1ce0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
1cf0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
1d00: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
1d10: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
1d20: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
1d30: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
1d40: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
1d50: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
1d60: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
1d70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d80: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
1d90: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
1da0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
1db0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
1dc0: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
1dd0: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
1de0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
1df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
1e00: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
1e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
1e20: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
1e30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e40: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
1e50: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
1e60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1e70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
1e80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
1e90: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
1ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1eb0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ec0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1ed0: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1ee0: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1ef0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f00: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f10: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f20: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f30: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f40: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f50: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f60: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f70: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1f80: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1f90: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fa0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fb0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1fc0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
1fd0: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
1fe0: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
1ff0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2000: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2010: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2020: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2030: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2040: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2050: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2060: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2070: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2080: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2090: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20a0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20b0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20c0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
20d0: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
20e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
20f0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2100: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2110: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2120: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2130: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2140: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2150: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2160: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2170: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2180: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2190: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21a0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21b0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21c0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
21d0: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
21e0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
21f0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2200: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2210: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2220: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2230: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2240: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2250: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2260: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2270: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2280: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2290: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22a0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22b0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
22d0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
22e0: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
22f0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2300: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2310: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2320: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2330: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2340: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2350: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2360: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2370: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2380: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2390: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23a0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23b0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23c0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
23d0: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
23e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23f0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2400: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2410: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2420: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2430: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2440: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2450: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2460: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2470: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2480: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2490: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24a0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24b0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24c0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
24d0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
24e0: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
24f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2500: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2510: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2520: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2530: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2540: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2550: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2560: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2570: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2580: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2590: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25a0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25b0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25c0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
25d0: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
25e0: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
25f0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2600: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2610: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2620: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2630: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2640: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2650: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2660: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2670: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2680: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2690: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26a0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26b0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26c0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
26d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
26e0: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
26f0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2700: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2710: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2720: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2730: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2740: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2750: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2760: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2770: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2780: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2790: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
27a0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27b0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27c0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
27d0: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
27e0: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
27f0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2800: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2810: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2820: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2830: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2840: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2850: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2860: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2870: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2880: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2890: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28a0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28b0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28c0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
28d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
28e0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
28f0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2900: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2910: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2920: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2930: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2940: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2950: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2960: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2970: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2980: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2990: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29a0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29c0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
29d0: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
29e0: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
29f0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a00: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a10: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a20: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a40: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a50: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a60: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2a70: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2a80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2a90: 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20  e.  These hints 
2aa0: 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65  could,.** in the
2ab0: 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20  ory, be used by 
2ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  the compiler to 
2ad0: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2ae0: 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72  code, but.** cur
2af0: 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20  rently they are 
2b00: 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  just comments fo
2b10: 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e  r human readers.
2b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65  .*/.#define like
2b30: 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65  ly(X)    (X).#de
2b40: 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  fine unlikely(X)
2b50: 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20    (X)..#include 
2b60: 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64  "hash.h".#includ
2b70: 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63  e "parse.h".#inc
2b80: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
2b90: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
2ba0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
2bb0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
2bc0: 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c  <assert.h>.#incl
2bd0: 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a  ude <stddef.h>..
2be0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69  /*.** If compili
2bf0: 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73  ng for a process
2c00: 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c  or that lacks fl
2c10: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70  oating point sup
2c20: 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74  port,.** substit
2c30: 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ute integer for 
2c40: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a  floating-point.*
2c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
2c70: 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75  INT.# define dou
2c80: 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ble sqlite_int64
2c90: 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20  .# define float 
2ca0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
2cb0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
2cc0: 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74  _TYPE sqlite_int
2cd0: 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49  64.# ifndef SQLI
2ce0: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64  TE_BIG_DBL.#   d
2cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2d00: 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f  _DBL (((sqlite3_
2d10: 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20  int64)1)<<50).# 
2d20: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
2d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
2d40: 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65  IME_FUNCS 1.# de
2d50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2d60: 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66  _TRACE 1.# undef
2d70: 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e   SQLITE_MIXED_EN
2d80: 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54  DIAN_64BIT_FLOAT
2d90: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2da0: 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69  HAVE_ISNAN.#endi
2db0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2dc0: 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e  _BIG_DBL.# defin
2dd0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
2de0: 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a   (1e99).#endif..
2df0: 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44  /*.** OMIT_TEMPD
2e00: 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66  B is set to 1 if
2e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2e20: 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20  PDB is defined, 
2e30: 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72  or 0.** afterwar
2e40: 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d  d. Having this m
2e50: 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  acro allows us t
2e60: 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f  o cause the C co
2e70: 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d  mpiler .** to om
2e80: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
2e90: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
2ea0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
2eb0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
2ec0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2ed0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
2ee0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
2ef0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
2f00: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
2f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
2f20: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
2f30: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
2f40: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
2f50: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
2f60: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
2f70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
2f80: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
2f90: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
2fa0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
2fb0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
2fc0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
2fd0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
2fe0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
2ff0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
3000: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
3010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3020: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
3030: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
3040: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3050: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
3060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3070: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
3080: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
3090: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
30a0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
30b0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
30c0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
30d0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
30e0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
30f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
3100: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3110: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
3120: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3130: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3140: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
3150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
3160: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
3170: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
3180: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
3190: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
31a0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
31b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
31c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
31d0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
31e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
31f0: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
3210: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
3220: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
3240: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
3250: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
3260: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
3270: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
3280: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
3290: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
32a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
32b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
32c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
32d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
32e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
32f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
3300: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
3310: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
3320: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
3330: 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  /.#define MIN(A,
3340: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
3350: 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58  (B)).#define MAX
3360: 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28  (A,B) ((A)>(B)?(
3370: 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43  A):(B))../*.** C
3380: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3390: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
33a0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
33b0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
33c0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
33d0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
33e0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
33f0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3400: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3410: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3420: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3430: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3440: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3450: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3460: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3470: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3480: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3490: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
34a0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
34b0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
34c0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
34d0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
34e0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
34f0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
3500: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
3510: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
3520: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
3530: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
3540: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
3550: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
3560: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
3570: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3580: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
3590: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
35a0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
35b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
35c0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
35d0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
35e0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
35f0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3600: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
3610: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
3620: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
3630: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3640: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
3650: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3660: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3670: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
3680: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
3690: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
36a0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
36b0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
36c0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
36d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
36e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
36f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3700: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
3710: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
3720: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
3730: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3740: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
3750: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3760: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
3770: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3780: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
3790: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
37c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
37d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
37e0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
37f0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3800: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
3810: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
3820: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
3830: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
3840: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
3850: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
3860: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
3870: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
3880: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
3890: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
38a0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
38b0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
38c0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
38d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
38e0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
38f0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
3900: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
3910: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3920: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
3930: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
3940: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
3950: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3960: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
3970: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
3980: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
3990: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
39a0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
39b0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
39c0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
39d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
39e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
39f0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
3a00: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
3a10: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
3a20: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
3a30: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
3a40: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
3a50: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
3a60: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
3a70: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
3a80: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
3a90: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
3aa0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
3ab0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
3ac0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
3ad0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
3ae0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
3af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b00: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
3b10: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
3b20: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
3b30: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
3b40: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
3b50: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
3b60: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
3b70: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
3b80: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3b90: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
3ba0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
3bb0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
3bc0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
3bd0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
3be0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
3bf0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
3c00: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
3c10: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
3c20: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
3c30: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
3c40: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
3c50: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
3c60: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
3c70: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
3c80: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
3c90: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
3ca0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
3cb0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3cc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
3cd0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
3ce0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
3cf0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
3d00: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
3d10: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
3d20: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
3d30: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
3d40: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
3d50: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
3d60: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
3d70: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
3d80: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
3d90: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
3da0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
3db0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
3dc0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
3dd0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
3de0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
3df0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
3e00: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
3e10: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
3e20: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
3e30: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
3e40: 45 73 74 20 71 75 61 6e 74 61 74 69 74 65 73 20  Est quantatites 
3e50: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
3e60: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
3e70: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
3e80: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
3e90: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
3ea0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
3eb0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
3ec0: 20 22 4c 6f 67 61 72 69 74 68 69 6d 69 63 20 45   "Logarithimic E
3ed0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
3ee0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
3ef0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
3f00: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
3f10: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
3f20: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
3f30: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
3f40: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
3f50: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
3f60: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
3f70: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
3f80: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
3f90: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
3fa0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
3fb0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
3fc0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
3fd0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
3fe0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
3ff0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
4000: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
4010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
4020: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
4030: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
4040: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
4050: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
4060: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
4070: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
4080: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
4090: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
40a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
40b0: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
40c0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
40d0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
40e0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
40f0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
4100: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
4110: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
4120: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4130: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4140: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4150: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4160: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4170: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4180: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
4190: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
41a0: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
41b0: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
41e0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
41f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
4200: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
4210: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4220: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4230: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4250: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4260: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
4270: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
4280: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4290: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
42a0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
42b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
42c0: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
42d0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
42e0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
42f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4300: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4310: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4320: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4330: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4340: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4350: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4360: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4370: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4380: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4390: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
43a0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
43b0: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
43c0: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
43d0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
43e0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
43f0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4400: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4410: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4420: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4430: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4440: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4450: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4460: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4470: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4480: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4490: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
44a0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
44b0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
44c0: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
44d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
44e0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
44f0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4500: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4510: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4520: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4530: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4540: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4550: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4560: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4570: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4580: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4590: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
45a0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
45b0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
45c0: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
45d0: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
45e0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
45f0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
4600: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
4610: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4620: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
4630: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
4640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
4650: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
4660: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
4670: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
4680: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
4690: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
46a0: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
46b0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
46c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
46d0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
46e0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
46f0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4700: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
4710: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
4720: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
4730: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
4740: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
4750: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
4760: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
4780: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
4790: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
47a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
47b0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
47c0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
47d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
47e0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
47f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4800: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
4810: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4820: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
4830: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
4840: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
4850: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
4860: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
4870: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
4880: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
4890: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
48a0: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
48b0: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
48c0: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
48d0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
48e0: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
48f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4900: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
4910: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4920: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
4930: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
4940: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
4950: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
4960: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
4970: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
4980: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
4990: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
49a0: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
49b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
49c0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
49d0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
49e0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
49f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4a00: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
4a10: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
4a20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4a30: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
4a40: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4a50: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4a60: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
4a70: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
4a80: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
4a90: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
4aa0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
4ab0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
4ac0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
4ad0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
4ae0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
4af0: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
4b00: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
4b10: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
4b20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
4b30: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4b50: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
4b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4b70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
4b80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
4b90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
4ba0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4bc0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
4bd0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
4be0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4bf0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
4c00: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4c10: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
4c20: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4c30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
4c40: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
4c50: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
4c60: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
4c70: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
4c80: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
4c90: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
4ca0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
4cb0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
4cc0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
4cd0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
4ce0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4cf0: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
4d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4d50: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
4d60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4d70: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
4d80: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4d90: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
4da0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4db0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
4dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4dd0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
4de0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
4df0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4e10: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4e20: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4e30: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4e40: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
4e50: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
4e60: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
4e70: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
4e80: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
4e90: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
4ea0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4eb0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4ec0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4ed0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4ee0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4ef0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4f00: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4f10: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4f20: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4f30: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4f40: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
4f50: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
4f60: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
4f70: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
4f80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4f90: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
4fa0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4fb0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4fc0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4fd0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4fe0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4ff0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5000: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5010: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5020: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5030: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5040: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5050: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5060: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5070: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5080: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5090: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
50a0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
50b0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
50c0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
50d0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
50e0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
50f0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5100: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5110: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5120: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5130: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5140: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5150: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5160: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5170: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5180: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5190: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
51b0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
51c0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
51d0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
51e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
51f0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5200: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5210: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5220: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5230: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5240: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5250: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5260: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5270: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5280: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5290: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
52a0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
52b0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
52c0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
52d0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
52e0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
52f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5300: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5310: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5320: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5330: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5340: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5350: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5360: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5370: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5380: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5390: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
53a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
53b0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
53c0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
53d0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
53e0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
53f0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5400: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5410: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5420: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5430: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5440: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5450: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5460: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5470: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5480: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5490: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
54a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
54b0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
54c0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
54d0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
54e0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
54f0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5500: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5510: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5520: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5530: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5540: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5550: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5560: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5570: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5580: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5590: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
55a0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
55b0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
55c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
55d0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
55e0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
55f0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5600: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5610: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5620: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5630: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5640: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
5650: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
5660: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
5670: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
5680: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
5690: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
56a0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
56b0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
56c0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
56d0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
56e0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
56f0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5700: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5710: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5720: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5730: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5740: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
5750: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
5760: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
5770: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
5780: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
5790: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
57a0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
57b0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
57c0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
57d0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
57e0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
57f0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5800: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5820: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5830: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5840: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
5850: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
5860: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
5870: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5880: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
5890: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
58a0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
58b0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
58c0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
58d0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
58e0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
58f0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5900: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5910: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5920: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5930: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5940: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
5950: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
5960: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
5970: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5980: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
5990: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
59a0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
59b0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
59c0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
59d0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
59e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
59f0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5a00: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5a10: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5a20: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5a30: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5a40: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
5a50: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
5a60: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
5a70: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
5a80: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
5a90: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
5aa0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5ab0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5ac0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5ad0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5ae0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5af0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5b00: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5b10: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5b20: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5b30: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5b40: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
5b50: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
5b60: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
5b70: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
5b90: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
5ba0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5bb0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5bc0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5bd0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5be0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5bf0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5c00: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5c10: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5c20: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5c30: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5c40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
5c50: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
5c60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
5c70: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
5c80: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
5c90: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
5ca0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5cb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5cc0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5cd0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5ce0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5cf0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5d00: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5d10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5d20: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5d30: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5d40: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
5d50: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
5d60: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
5d70: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
5d80: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
5d90: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
5da0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5db0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5dc0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5dd0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5de0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e00: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5e10: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5e20: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5e30: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5e40: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
5e50: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
5e60: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
5e70: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
5e80: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
5e90: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
5ea0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5eb0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5ec0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5ed0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5ee0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5ef0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5f00: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5f10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5f30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
5f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
5f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
5f90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
5fa0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5fc0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5fe0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5ff0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6000: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6010: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6020: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6030: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6040: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6050: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6070: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6080: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6090: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
60a0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
60b0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
60c0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
60d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
60e0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
60f0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e  edef struct Prin
6100: 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e  tfArguments Prin
6110: 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70  tfArguments;.typ
6120: 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53  edef struct RowS
6130: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6140: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6150: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6170: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6180: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6190: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
61a0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61b0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
61c0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61d0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
61e0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
61f0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
6200: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6210: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
6220: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6230: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6240: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6250: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6260: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6270: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6280: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6290: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
62a0: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
62b0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
62c0: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
62d0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
62e0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
62f0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
6300: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
6310: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
6320: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6330: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6340: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6350: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70  o WhereInfo;.typ
6360: 65 64 65 66 20 73 74 72 75 63 74 20 57 69 74 68  edef struct With
6370: 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65   With;../*.** De
6380: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
6390: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
63a0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
63b0: 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42 75  "u8" and .** "Bu
63c0: 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64  syHandler" typed
63d0: 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f  efs. vdbe.h also
63e0: 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20   requires a few 
63f0: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a  of the opaque.**
6400: 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28   pointer types (
6410: 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65  i.e. FuncDef) de
6420: 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a  fined above..*/.
6430: 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e  #include "btree.
6440: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62  h".#include "vdb
6450: 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70  e.h".#include "p
6460: 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ager.h".#include
6470: 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69 6e   "pcache.h"..#in
6480: 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e  clude "os.h".#in
6490: 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a  clude "mutex.h".
64a0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
64b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
64c0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
64d0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
64e0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
64f0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
6500: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
6510: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
6520: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
6530: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
6540: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
6550: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
6560: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6570: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
6580: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
6590: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
65a0: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
65b0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
65c0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
65d0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
65e0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
65f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
6600: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
6610: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
6620: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
6630: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a         /* The B*
6640: 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66  Tree structure f
6650: 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65  or this database
6660: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61   file */.  u8 sa
6670: 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20  fety_level;     
6680: 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76  /* How aggressiv
6690: 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74  e at syncing dat
66a0: 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 53  a to disk */.  S
66b0: 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
66c0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
66d0: 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  o database schem
66e0: 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61 72  a (possibly shar
66f0: 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ed) */.};../*.**
6700: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
6710: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
6720: 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20 61  ructure stores a
6730: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6740: 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68  ..**.** Most Sch
6750: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
6760: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
6770: 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65 78  a Btree.  The ex
6780: 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68  ception is.** th
6790: 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68 65  e Schema for the
67a0: 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20 28   TEMP databaes (
67b0: 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29 20  sqlite3.aDb[1]) 
67c0: 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73 74  which is free-st
67d0: 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68  anding..** In sh
67e0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 2c  ared cache mode,
67f0: 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d 61   a single Schema
6800: 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20 73   object can be s
6810: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
6820: 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61 74  e.** Btrees that
6830: 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73 61   refer to the sa
6840: 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42 74  me underlying Bt
6850: 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a  Shared object..*
6860: 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  * .** Schema obj
6870: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
6880: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
6890: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
68a0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
68b0: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
68c0: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
68d0: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
68e0: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
68f0: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
6900: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
6910: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
6920: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
6930: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
6940: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
6950: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
6960: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
6970: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
6980: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
6990: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
69a0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
69b0: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
69c0: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
69d0: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
69e0: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
69f0: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
6a00: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
6a10: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
6a20: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
6a30: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
6a40: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
6a50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
6a60: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
6a70: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
6a80: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
6a90: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
6aa0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
6ab0: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
6ac0: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
6ad0: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
6ae0: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
6af0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
6b00: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
6b10: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
6b20: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
6b30: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
6b40: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
6b50: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
6b60: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
6b70: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
6b80: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
6b90: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
6ba0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
6bb0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
6bc0: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
6bd0: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
6be0: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
6bf0: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
6c00: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
6c10: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
6c20: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
6c30: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
6c40: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
6c50: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
6c70: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
6c80: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
6c90: 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  se */.  u16 flag
6ca0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
6cb0: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
6cc0: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
6cd0: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
6ce0: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
6cf0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
6d00: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
6d10: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
6d20: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
6d30: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
6d40: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
6d50: 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20  bits in the .** 
6d60: 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  Db.pSchema->flag
6d70: 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
6d80: 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74  ine DbHasPropert
6d90: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28  y(D,I,P)     (((
6da0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6db0: 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  ma->flags&(P))==
6dc0: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
6dd0: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
6de0: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
6df0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
6e00: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
6e10: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
6e20: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
6e30: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
6e40: 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65  ->flags|=(P).#de
6e50: 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f 70  fine DbClearProp
6e60: 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28 44  erty(D,I,P)   (D
6e70: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6e80: 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  a->flags&=~(P)..
6e90: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
6ea0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
6eb0: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
6ec0: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
6ed0: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
6ee0: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
6ef0: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
6f00: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
6f10: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
6f20: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
6f30: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
6f40: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
6f50: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
6f60: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
6f70: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
6f80: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
6f90: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
6fa0: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
6fb0: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
6fc0: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
6fd0: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
6fe0: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
6ff0: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
7000: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
7010: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
7020: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
7030: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
7040: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
7050: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
7060: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
7070: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
7080: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
7090: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
70a0: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
70b0: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
70c0: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
70d0: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
70e0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
70f0: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
7100: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
7110: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
7120: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
7130: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
7140: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
7150: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
7160: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
7170: 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f 2a  GER_DEPTH+1)../*
7180: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** Lookaside ma
7190: 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66  lloc is a set of
71a0: 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66   fixed-size buff
71b0: 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ers that can be 
71c0: 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73  used.** to satis
71d0: 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65  fy small transie
71e0: 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  nt memory alloca
71f0: 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f  tion requests fo
7200: 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73  r objects.** ass
7210: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70  ociated with a p
7220: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7230: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7240: 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f  The use of.** lo
7250: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70  okaside malloc p
7260: 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66  rovides a signif
7270: 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63  icant performanc
7280: 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a  e enhancement.**
7290: 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79   (approx 10%) by
72a0: 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f   avoiding numero
72b0: 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72  us malloc/free r
72c0: 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61  equests while pa
72d0: 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61  rsing.** SQL sta
72e0: 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54  tements..**.** T
72f0: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72  he Lookaside str
7300: 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e  ucture holds con
7310: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72  figuration infor
7320: 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
7330: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7340: 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20  lloc subsystem. 
7350: 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20   Each available 
7360: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
7370: 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b  n in.** the look
7380: 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20  aside subsystem 
7390: 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c  is stored on a l
73a0: 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f  inked list of Lo
73b0: 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f  okasideSlot.** o
73c0: 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f  bjects..**.** Lo
73d0: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
73e0: 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c  ons are only all
73f0: 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73  owed for objects
7400: 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69   that are associ
7410: 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70  ated.** with a p
7420: 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61  articular databa
7430: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
7440: 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e  Hence, schema in
7450: 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74  formation cannot
7460: 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e  .** be stored in
7470: 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75   lookaside becau
7480: 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63  se in shared cac
7490: 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65  he mode the sche
74a0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ma information.*
74b0: 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d  * is shared by m
74c0: 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
74d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54   connections.  T
74e0: 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20  herefore, while 
74f0: 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d  parsing.** schem
7500: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  a information, t
7510: 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e  he Lookaside.bEn
7520: 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c  abled flag is cl
7530: 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a  eared so that.**
7540: 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   lookaside alloc
7550: 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75  ations are not u
7560: 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74  sed to construct
7570: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65   the schema obje
7580: 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c  cts..*/.struct L
7590: 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31 36  ookaside {.  u16
75a0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
75b0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
75c0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
75d0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45 6e  ytes */.  u8 bEn
75e0: 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
75f0: 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64 69    /* False to di
7600: 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61 73  sable new lookas
7610: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
7620: 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65  */.  u8 bMalloce
7630: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
7640: 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20 6f  True if pStart o
7650: 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c  btained from sql
7660: 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f  ite3_malloc() */
7670: 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20  .  int nOut;    
7680: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
7690: 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73 20  mber of buffers 
76a0: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
76b0: 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d  d out */.  int m
76c0: 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  xOut;           
76d0: 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20     /* Highwater 
76e0: 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f  mark for nOut */
76f0: 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d  .  int anStat[3]
7700: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a  ;          /* 0:
7710: 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20   hits.  1: size 
7720: 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c  misses.  2: full
7730: 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f   misses */.  Loo
7740: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65  kasideSlot *pFre
7750: 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  e;   /* List of 
7760: 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72  available buffer
7770: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74  s */.  void *pSt
7780: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  art;           /
7790: 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66 20  * First byte of 
77a0: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
77b0: 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64   space */.  void
77c0: 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
77d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
77e0: 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76  e past end of av
77f0: 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f  ailable space */
7800: 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .};.struct Looka
7810: 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f  sideSlot {.  Loo
7820: 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78  kasideSlot *pNex
7830: 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75  t;    /* Next bu
7840: 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74  ffer in the list
7850: 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72 73   of free buffers
7860: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
7870: 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  hash table for f
7880: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
7890: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  ons..**.** Hash 
78a0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
78b0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
78c0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
78d0: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
78e0: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
78f0: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 70  on the FuncDef.p
7900: 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 73  Hash chain..*/.s
7910: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
7920: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
7930: 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48  [23];       /* H
7940: 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75  ash table for fu
7950: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f  nctions */.};../
7960: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
7970: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
7980: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
7990: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
79a0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
79b0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
79c0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
79d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
79e0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
79f0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
7a00: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
7a10: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
7a20: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
7a30: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
7a40: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
7a50: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
7a60: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
7a70: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
7a80: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
7a90: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
7aa0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
7ab0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
7ac0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
7ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
7ae0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
7af0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7b10: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
7b20: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
7b30: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
7b40: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7b50: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
7b60: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
7b70: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
7b80: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7ba0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
7bb0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
7bc0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
7bd0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
7be0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
7bf0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
7c00: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
7c10: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
7c20: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
7c30: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
7c40: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
7c50: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
7c60: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
7c70: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
7c80: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
7c90: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
7ca0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
7cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7cc0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
7cd0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
7ce0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 75  returning */.  u
7cf0: 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20  16 dbOptFlags;  
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d10: 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f  Flags to enable/
7d20: 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61  disable optimiza
7d30: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61 75  tions */.  u8 au
7d40: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
7d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
7d60: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
7d70: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
7d80: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
7d90: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
7da0: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
7db0: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
7dc0: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
7dd0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
7de0: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
7df0: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
7e00: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
7e10: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
7e20: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
7e30: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
7e40: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
7e50: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
7e60: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
7e70: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
7e80: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
7e90: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
7ea0: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
7ec0: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
7ed0: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
7ee0: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
7ef0: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
7f00: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
7f10: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
7f20: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
7f30: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
7f40: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
7f50: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
7f60: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
7f70: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
7f80: 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65  /.  int nextPage
7f90: 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20  size;           
7fa0: 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66    /* Pagesize af
7fb0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30  ter VACUUM if >0
7fc0: 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b   */.  u32 magic;
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d      /* Magic num
7ff0: 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c  ber for detect l
8000: 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f  ibrary misuse */
8010: 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20  .  int nChange; 
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8040: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68  ed by sqlite3_ch
8050: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
8060: 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20   nTotalChange;  
8070: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
8080: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
8090: 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68  sqlite3_total_ch
80a0: 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74  anges() */.  int
80b0: 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e   aLimit[SQLITE_N
80c0: 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69  _LIMIT];   /* Li
80d0: 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  mits */.  struct
80e0: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
80f0: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
8100: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
8110: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
8120: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
8130: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
8140: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
8150: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
8160: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
8170: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8190: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
81a0: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
81b0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
81c0: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
81d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
81e0: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
81f0: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
8200: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
8210: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
8220: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
8230: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
8240: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20 69  trigger */.  } i
8250: 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65  nit;.  int nVdbe
8260: 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20 20  Active;         
8270: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8280: 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c  f VDBEs currentl
8290: 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69  y running */.  i
82a0: 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20  nt nVdbeRead;   
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
82c0: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
82d0: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
82e0: 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69   or write */.  i
82f0: 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20  nt nVdbeWrite;  
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8310: 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65  Number of active
8320: 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61 64   VDBEs that read
8330: 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20   and write */.  
8340: 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20  int nVdbeExec;  
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8360: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
8370: 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45  d calls to VdbeE
8380: 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  xec() */.  int n
8390: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
83a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
83b0: 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74  er of loaded ext
83c0: 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69  ensions */.  voi
83d0: 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20  d **aExtension; 
83e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
83f0: 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69  ray of shared li
8400: 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f  brary handles */
8410: 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63 65  .  void (*xTrace
8420: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
8430: 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a 20  ar*);        /* 
8440: 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  Trace function *
8450: 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65  /.  void *pTrace
8460: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8480: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   Argument to the
8490: 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   trace function 
84a0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f  */.  void (*xPro
84b0: 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  file)(void*,cons
84c0: 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f  t char*,u64);  /
84d0: 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63  * Profiling func
84e0: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
84f0: 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20  pProfileArg;    
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8510: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8520: 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74  to profile funct
8530: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
8540: 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20  CommitArg;      
8550: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
8560: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69  gument to xCommi
8570: 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  tCallback() */  
8580: 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69   .  int (*xCommi
8590: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
85a0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
85b0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
85c0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
85d0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
85e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
85f0: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
8600: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20 20  kCallback() */  
8610: 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c   .  void (*xRoll
8620: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
8630: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
8640: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
8650: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
8660: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
8670: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
8680: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
8690: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
86a0: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
86b0: 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  64);.#ifndef SQL
86c0: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
86d0: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
86e0: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
86f0: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
8700: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
8710: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
8720: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
8730: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
8740: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
8750: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
8760: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
8770: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
8780: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8790: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
87a0: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
87b0: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
87c0: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
87d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
87e0: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
87f0: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
8800: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
8810: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8820: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8830: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
8840: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
8850: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
8860: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
8870: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
8880: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
8890: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
88a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
88b0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
88c0: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
88d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
88e0: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
88f0: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
8900: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
8910: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8920: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8930: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8960: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8970: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8980: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
89a0: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
89b0: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
89c0: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
89d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
89e0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
89f0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
8a00: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
8a10: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8a20: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8a30: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8a40: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8a50: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8a60: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8a70: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8a80: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8a90: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8aa0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8ab0: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
8ac0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
8ad0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8ae0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
8af0: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
8b00: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
8b10: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8b20: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8b30: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8b40: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8b50: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8b60: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8b70: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8b80: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8b90: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8ba0: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8bb0: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
8bc0: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
8bd0: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8bf0: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
8c00: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
8c10: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8c20: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8c30: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8c40: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8c50: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8c60: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8c70: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8c90: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8ca0: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8cb0: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
8cc0: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
8cd0: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
8ce0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
8cf0: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
8d00: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
8d10: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8d20: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8d30: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8d40: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8d50: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8d60: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8d70: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8d80: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8d90: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8da0: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8db0: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
8dc0: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
8dd0: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
8de0: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
8df0: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
8e00: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8e10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8e20: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8e30: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8e40: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8e50: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8e60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8e70: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8e80: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8e90: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
8ea0: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
8eb0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
8ec0: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
8ed0: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
8ee0: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8ef0: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
8f00: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
8f10: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
8f20: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
8f30: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
8f50: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
8f60: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
8f70: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
8f80: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
8f90: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
8fa0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
8fb0: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
8fc0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
8fd0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
8fe0: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
8ff0: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
9000: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
9010: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
9020: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
9030: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
9040: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
9050: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
9060: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
9070: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
9080: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
9090: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
90a0: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
90b0: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
90c0: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
90d0: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
90e0: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
90f0: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
9100: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
9110: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
9120: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
9130: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
9140: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
9150: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
9160: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
9170: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
9180: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
9190: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
91a0: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
91b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
91c0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
91d0: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
91e0: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
91f0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9200: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9210: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
9220: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
9230: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
9240: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
9250: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
9260: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
9270: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
9280: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
9290: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
92a0: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
92b0: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
92c0: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
92d0: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
92e0: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
92f0: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
9300: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
9310: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
9320: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
9330: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
9340: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
9350: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
9360: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9370: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
9380: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
9390: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
93a0: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
93b0: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
93c0: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
93d0: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
93e0: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
93f0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9400: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9410: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
9420: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
9430: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
9440: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
9450: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
9460: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
9470: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
9480: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
9490: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
94a0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
94b0: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
94c0: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
94d0: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
94e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
94f0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
9500: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
9510: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
9520: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
9530: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
9540: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
9550: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
9560: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
9570: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
9580: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9590: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
95a0: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
95b0: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
95c0: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
95f0: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
9600: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
9610: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9640: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
9650: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
9660: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9670: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
9680: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
9690: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
96a0: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
96b0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
96c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
96e0: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
96f0: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
9700: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
9710: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
9720: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
9730: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
9740: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
9750: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
9760: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
9770: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
9780: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
9790: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
97a0: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
97b0: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
97c0: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
97d0: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
97e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
97f0: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
9800: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
9810: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
9820: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
9830: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9840: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
9850: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
9860: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
9870: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
9880: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9890: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
98a0: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
98b0: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
98c0: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
98d0: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
98e0: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
98f0: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
9900: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
9910: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
9920: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
9930: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
9940: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
9950: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
9960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
9970: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
9980: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
9990: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
99a0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
99b0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
99c0: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
99d0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
99e0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
99f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a00: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
9a10: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
9a20: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
9a30: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
9a40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9a50: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
9a60: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
9a70: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
9a80: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
9a90: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
9aa0: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
9ab0: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
9ac0: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
9ad0: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
9ae0: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
9af0: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
9b00: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
9b10: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
9b20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
9b30: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
9b40: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
9b50: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
9b60: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
9b70: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
9b80: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
9b90: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
9ba0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
9bb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
9bc0: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
9bd0: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
9be0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
9bf0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9c00: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
9c10: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
9c20: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
9c30: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
9c40: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
9c50: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
9c60: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
9c70: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
9c80: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9c90: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9ca0: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9cb0: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9cc0: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9cd0: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9ce0: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9cf0: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9d00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9d10: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9d20: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
9d30: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
9d40: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
9d50: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
9d60: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
9d70: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9d80: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9d90: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9da0: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9db0: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9dc0: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9dd0: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9de0: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9df0: 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20  ctoring */./*   
9e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74               not
9e10: 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30 20   used    0x0010 
9e20: 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45    // Was: SQLITE
9e30: 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f  _IdxRealAsInt */
9e40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9e50: 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30  DistinctOpt    0
9e60: 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49  x0020   /* DISTI
9e70: 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65  NCT using indexe
9e80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9e90: 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e  ITE_CoverIdxScan
9ea0: 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43     0x0040   /* C
9eb0: 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63  overing index sc
9ec0: 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ans */.#define S
9ed0: 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78  QLITE_OrderByIdx
9ee0: 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a  Join 0x0080   /*
9ef0: 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69   ORDER BY of joi
9f00: 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a  ns via index */.
9f10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
9f20: 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78  ubqCoroutine  0x
9f30: 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61  0100   /* Evalua
9f40: 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61 73  te subqueries as
9f50: 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23   coroutines */.#
9f60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72  define SQLITE_Tr
9f70: 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78 30  ansitive     0x0
9f80: 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74  200   /* Transit
9f90: 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ive constraints 
9fa0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9fb0: 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20  E_OmitNoopJoin  
9fc0: 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69   0x0400   /* Omi
9fd0: 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20  t unused tables 
9fe0: 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66  in joins */.#def
9ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33  ine SQLITE_Stat3
a000: 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30 30            0x0800
a010: 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53 51     /* Use the SQ
a020: 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c 65  LITE_STAT3 table
a030: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a040: 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74 20  TE_AdjustOutEst 
a050: 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41 64    0x1000   /* Ad
a060: 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74 69  just output esti
a070: 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45 52  mates using WHER
a080: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
a090: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
a0a0: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
a0b0: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
a0c0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
a0d0: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
a0e0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
a0f0: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
a100: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
a110: 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
a120: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54  QLITE_OMIT_BUILT
a130: 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65 20  IN_TEST.#define 
a140: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
a150: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
a160: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
a170: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
a180: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
a190: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
a1a0: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
a1b0: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
a1c0: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65 66  )==0).#else.#def
a1d0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
a1e0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
a1f0: 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f 70  k)  0.#define Op
a200: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
a210: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31 0a  d(db, mask)   1.
a220: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
a230: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
a240: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
a250: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
a260: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
a270: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
a280: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
a290: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
a2a0: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
a2b0: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
a2c0: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
a2d0: 4f 6b 28 50 29 20 5c 0a 20 20 28 28 50 29 2d 3e  Ok(P) \.  ((P)->
a2e0: 63 6f 6f 6b 69 65 47 6f 74 6f 3e 30 20 26 26 20  cookieGoto>0 && 
a2f0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
a300: 6c 65 64 28 28 50 29 2d 3e 64 62 2c 53 51 4c 49  led((P)->db,SQLI
a310: 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73  TE_FactorOutCons
a320: 74 29 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  t))../*.** Possi
a330: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
a340: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
a350: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
a360: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
a370: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
a380: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
a390: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
a3a0: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
a3b0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
a3c0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
a3d0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
a3e0: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
a3f0: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
a400: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
a410: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a420: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
a430: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
a440: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
a450: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a460: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
a470: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
a480: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
a490: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
a4a0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
a4b0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
a4c0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
a4d0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
a4e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a4f0: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
a500: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
a510: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
a520: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
a530: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a540: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
a550: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
a560: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
a570: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
a580: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
a590: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
a5a0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
a5b0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
a5c0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
a5d0: 75 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20  ure.  A pointer 
a5e0: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
a5f0: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  e is stored in t
a600: 68 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a  he sqlite.aFunc.
a610: 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20  ** hash table.  
a620: 57 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75  When multiple fu
a630: 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65  nctions have the
a640: 20 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20   same name, the 
a650: 68 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f  hash table.** po
a660: 69 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64  ints to a linked
a670: 20 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73   list of these s
a680: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74  tructures..*/.st
a690: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
a6a0: 20 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20   i16 nArg;      
a6b0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a6c0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
a6d0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
a6e0: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
a6f0: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
a700: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
a710: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
a720: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
a730: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
a740: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
a750: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
a760: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
a770: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
a780: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
a790: 20 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73   void (*xFunc)(s
a7a0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
a7b0: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
a7c0: 65 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72  e**); /* Regular
a7d0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
a7e0: 6f 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c  oid (*xStep)(sql
a7f0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
a800: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
a810: 2a 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65  *); /* Aggregate
a820: 20 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20   step */.  void 
a830: 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c  (*xFinalize)(sql
a840: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20  ite3_context*); 
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a860: 2a 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61  * Aggregate fina
a870: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20  lizer */.  char 
a880: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
a890: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
a8a0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
a8b0: 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68    FuncDef *pHash
a8c0: 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  ;      /* Next w
a8d0: 69 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20  ith a different 
a8e0: 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d  name but the sam
a8f0: 65 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63  e hash */.  Func
a900: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
a910: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
a920: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
a930: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
a940: 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ion */.};../*.**
a950: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
a960: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
a970: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
a980: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
a990: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
a9a0: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
a9b0: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
a9c0: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
a9d0: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
a9e0: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
a9f0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
aa00: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
aa10: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
aa20: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
aa30: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
aa40: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
aa50: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
aa60: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
aa70: 74 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  to .** the numbe
aa80: 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a  r of FuncDef obj
aa90: 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69  ects created (ei
aaa0: 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70  ther 1 or 3, dep
aab0: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
aac0: 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20  r.** or not the 
aad0: 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69  specified encodi
aae0: 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59  ng is SQLITE_ANY
aaf0: 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70  ). The FuncDef.p
ab00: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65  Destructor.** me
ab10: 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20  mber of each of 
ab20: 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20  the new FuncDef 
ab30: 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74  objects is set t
ab40: 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61  o point to the a
ab50: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63  llocated.** Func
ab60: 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a  Destructor..**.*
ab70: 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68  * Thereafter, wh
ab80: 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75  en one of the Fu
ab90: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
aba0: 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65   deleted, the re
abb0: 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74  ference.** count
abc0: 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20   on this object 
abd0: 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  is decremented. 
abe0: 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20  When it reaches 
abf0: 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f  0, the destructo
ac00: 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20  r.** is invoked 
ac10: 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74  and the FuncDest
ac20: 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65  ructor structure
ac30: 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63   freed..*/.struc
ac40: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
ac50: 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20   {.  int nRef;. 
ac60: 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
ac70: 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69  )(void *);.  voi
ac80: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b  d *pUserData;.};
ac90: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
aca0: 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63   values for Func
acb0: 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65  Def.flags.  Note
acc0: 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54   that the _LENGT
acd0: 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a  H and _TYPEOF.**
ace0: 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72   values must cor
acf0: 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41  respond to OPFLA
ad00: 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
ad10: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
ad20: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
ad30: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
ad40: 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20  nts in the code 
ad50: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a  to verify this..
ad60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad70: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
ad80: 30 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f  0x003 /* SQLITE_
ad90: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46  UTF8, SQLITE_UTF
ada0: 31 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20  16BE or UTF16LE 
adb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
adc0: 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20  E_FUNC_LIKE     
add0: 30 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  0x004 /* Candida
ade0: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
adf0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
ae00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ae10: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
ae20: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
ae30: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
ae40: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
ae50: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
ae60: 50 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a  PHEM    0x010 /*
ae70: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
ae80: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
ae90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aea0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
aeb0: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
aec0: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
aed0: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a  ight be called *
aee0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
aef0: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
af00: 78 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x040 /* Built-in
af10: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
af20: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
af30: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
af40: 20 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c     0x080 /* Buil
af50: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
af60: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
af70: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
af80: 55 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20  UNT    0x100 /* 
af90: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
afa0: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
afb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
afc0: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30  NC_COALESCE 0x20
afd0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
afe0: 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75  alesce() or ifnu
aff0: 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ll() */.#define 
b000: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49  SQLITE_FUNC_UNLI
b010: 4b 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75  KELY 0x400 /* Bu
b020: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
b030: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
b040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b050: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 38 30 30  C_CONSTANT 0x800
b060: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
b070: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
b080: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 2f  ant output */../
b090: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
b0a0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
b0b0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
b0c0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
b0d0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
b0e0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
b0f0: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
b100: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
b110: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
b120: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
b130: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
b140: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
b150: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
b160: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
b170: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
b180: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
b190: 65 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  e .**     implem
b1a0: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
b1b0: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
b1c0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
b1d0: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
b1e0: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
b1f0: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
b200: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
b210: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
b220: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
b230: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
b240: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
b250: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
b260: 66 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65  f .**     argume
b270: 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20  nt bNC is true, 
b280: 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  then the SQLITE_
b290: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c  FUNC_NEEDCOLL fl
b2a0: 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  ag is set..**.**
b2b0: 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61     VFUNCTION(zNa
b2c0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
b2d0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
b2e0: 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e     Like FUNCTION
b2f0: 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73   except it omits
b300: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
b310: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a  _CONSTANT flag..
b320: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
b330: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
b340: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
b350: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
b360: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
b370: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
b380: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
b390: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
b3a0: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
b3b0: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
b3c0: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
b3d0: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
b3e0: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
b3f0: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
b400: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
b410: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
b420: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
b430: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
b440: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
b450: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
b460: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
b470: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
b480: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
b490: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
b4a0: 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20  tion zName .**  
b4b0: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
b4c0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
b4d0: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
b4e0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
b4f0: 20 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f   .**     functio
b500: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
b510: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
b520: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
b530: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
b540: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
b550: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
b560: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
b570: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
b580: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
b590: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
b5a0: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
b5b0: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
b5c0: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
b5d0: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
b5e0: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
b5f0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
b600: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
b610: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
b620: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
b630: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b640: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b650: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
b660: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
b670: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
b680: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
b690: 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28  efine VFUNCTION(
b6a0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
b6b0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
b6c0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
b6d0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b6e0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b6f0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
b700: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
b710: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20  0, xFunc, 0, 0, 
b720: 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64  #zName, 0, 0}.#d
b730: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28  efine FUNCTION2(
b740: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
b750: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65  g, bNC, xFunc, e
b760: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
b770: 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43  nArg,SQLITE_FUNC
b780: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
b790: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
b7a0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
b7b0: 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20  |extraFlags,\.  
b7c0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b7d0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b7e0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b7f0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b800: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
b810: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
b820: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
b830: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
b840: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
b850: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
b860: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b870: 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30  L), \.   pArg, 0
b880: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  , xFunc, 0, 0, #
b890: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
b8a0: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
b8b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
b8c0: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
b8d0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
b8e0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
b8f0: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
b900: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
b910: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23  ikeFunc, 0, 0, #
b920: 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65  zName, 0, 0}.#de
b930: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
b940: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
b950: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
b960: 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
b970: 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
b980: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b990: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
b9a0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
b9b0: 29 2c 20 30 2c 20 30 2c 20 78 53 74 65 70 2c 78  ), 0, 0, xStep,x
b9c0: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 30 2c 30  Final,#zName,0,0
b9d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
b9e0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
b9f0: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
ba00: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
ba10: 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
ba20: 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
ba30: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
ba40: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
ba50: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
ba60: 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
ba70: 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
ba80: 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
ba90: 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
baa0: 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
bab0: 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
bac0: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
bad0: 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
bae0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bb00: 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
bb10: 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
bb20: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
bb30: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
bb40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bb50: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
bb60: 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
bb70: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
bb80: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
bb90: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bba0: 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
bbb0: 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
bbc0: 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbe0: 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
bbf0: 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
bc00: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
bc10: 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
bc20: 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
bc30: 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
bc40: 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
bc50: 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
bc60: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
bc70: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
bc80: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
bc90: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
bca0: 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
bcb0: 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
bcc0: 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
bcd0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
bce0: 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
bcf0: 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
bd00: 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
bd10: 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
bd20: 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
bd30: 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
bd40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
bd50: 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
bd60: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
bd70: 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
bd80: 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
bd90: 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
bda0: 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
bdb0: 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
bdc0: 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
bdd0: 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
bde0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be00: 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
be10: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
be20: 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
be50: 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
be60: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
be70: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
be80: 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
be90: 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
bea0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
beb0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
bec0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
bed0: 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66  t each column of
bee0: 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73   an SQL table is
bef0: 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74   held in an inst
bf00: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
bf10: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
bf20: 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20  ruct Column {.  
bf30: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
bf40: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
bf50: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70   column */.  Exp
bf60: 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
bf70: 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
bf80: 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
bf90: 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c 74 3b 20  .  char *zDflt; 
bfa0: 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
bfb0: 74 65 78 74 20 6f 66 20 74 68 65 20 64 65 66 61  text of the defa
bfc0: 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 63  ult value */.  c
bfd0: 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 20 20 20  har *zType;     
bfe0: 2f 2a 20 44 61 74 61 20 74 79 70 65 20 66 6f 72  /* Data type for
bff0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
c000: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
c010: 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
c020: 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
c030: 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
c040: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
c050: 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
c060: 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
c070: 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
c080: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
c090: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
c0a0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
c0b0: 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
c0c0: 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
c0d0: 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
c0e0: 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
c0f0: 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 20 49   this column.  I
c100: 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  NT==1 */.  u8 co
c110: 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
c120: 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
c130: 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
c140: 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
c150: 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
c160: 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
c170: 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
c180: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
c190: 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
c1a0: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
c1b0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
c1c0: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
c1d0: 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
c1e0: 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
c1f0: 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
c200: 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
c210: 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ble */../*.** A 
c220: 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
c230: 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
c240: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
c250: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
c260: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
c270: 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
c280: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
c290: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
c2a0: 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
c2b0: 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
c2c0: 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
c2d0: 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
c2e0: 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
c2f0: 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
c300: 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
c310: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
c320: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
c330: 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
c340: 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
c350: 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
c360: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
c370: 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
c380: 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
c390: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
c3a0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
c3b0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
c3c0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
c3d0: 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
c3e0: 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
c3f0: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
c400: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
c410: 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
c420: 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
c430: 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
c440: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
c450: 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
c460: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
c470: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
c480: 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
c490: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
c4a0: 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
c4b0: 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
c4c0: 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
c4d0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
c4e0: 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
c4f0: 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
c500: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c510: 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
c520: 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
c530: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
c540: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
c550: 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
c560: 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
c570: 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 0a  nding order */..
c580: 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
c590: 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
c5a0: 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
c5b0: 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
c5c0: 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
c5d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
c5e0: 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
c5f0: 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
c600: 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
c610: 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
c620: 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
c630: 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
c640: 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
c650: 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
c660: 6e 73 65 63 75 74 69 76 65 6c 79 2e 20 20 0a 2a  nsecutively.  .*
c670: 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20  *.** But rather 
c680: 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20  than start with 
c690: 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e  0 or 1, we begin
c6a0: 20 77 69 74 68 20 27 61 27 2e 20 20 54 68 61 74   with 'a'.  That
c6b0: 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75   way,.** when mu
c6c0: 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20  ltiple affinity 
c6d0: 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74  types are concat
c6e0: 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74  enated into a st
c6f0: 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64  ring and.** used
c700: 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61   as the P4 opera
c710: 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65  nd, they will be
c720: 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a   more readable..
c730: 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20  **.** Note also 
c740: 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63  that the numeric
c750: 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70   types are group
c760: 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74  ed together so t
c770: 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66  hat testing.** f
c780: 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70  or a numeric typ
c790: 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f  e is a single co
c7a0: 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a 23 64 65  mparison..*/.#de
c7b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c7c0: 54 45 58 54 20 20 20 20 20 27 61 27 0a 23 64 65  TEXT     'a'.#de
c7d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c7e0: 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a 23 64 65  NONE     'b'.#de
c7f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c800: 4e 55 4d 45 52 49 43 20 20 27 63 27 0a 23 64 65  NUMERIC  'c'.#de
c810: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c820: 49 4e 54 45 47 45 52 20 20 27 64 27 0a 23 64 65  INTEGER  'd'.#de
c830: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
c840: 52 45 41 4c 20 20 20 20 20 27 65 27 0a 0a 23 64  REAL     'e'..#d
c850: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
c860: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
c870: 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
c880: 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
c890: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
c8a0: 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
c8b0: 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
c8c0: 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
c8d0: 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
c8e0: 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64 65 66 69  value. .*/.#defi
c8f0: 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  ne SQLITE_AFF_MA
c900: 53 4b 20 20 20 20 20 30 78 36 37 0a 0a 2f 2a 0a  SK     0x67../*.
c910: 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69  ** Additional bi
c920: 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61  t values that ca
c930: 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61  n be ORed with a
c940: 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f  n affinity witho
c950: 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74  ut.** changing t
c960: 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2f 0a  he affinity..*/.
c970: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
c980: 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 30 38  UMPIFNULL   0x08
c990: 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
c9a0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
c9b0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
c9c0: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
c9d0: 20 20 20 20 30 78 31 30 20 20 2f 2a 20 53 74 6f      0x10  /* Sto
c9e0: 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
c9f0: 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
ca00: 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
ca10: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
ca20: 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
ca30: 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  LL=NULL */../*.*
ca40: 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
ca50: 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
ca60: 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
ca70: 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
ca80: 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
ca90: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 0a 2a  abase schema. .*
caa0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61  *.** If the data
cab0: 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
cac0: 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72  hared, then ther
cad0: 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63  e is one instanc
cae0: 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72  e of this.** str
caf0: 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20  ucture for each 
cb00: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
cb10: 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74  ion (sqlite3*) t
cb20: 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61  hat uses the sha
cb30: 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54  red.** schema. T
cb40: 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65  his is because e
cb50: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
cb60: 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73  nection requires
cb70: 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a   its own unique.
cb80: 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
cb90: 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
cba0: 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20   handle used to 
cbb0: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
cbc0: 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20 69 6d 70  al table .** imp
cbd0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
cbe0: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
cbf0: 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
cc00: 61 72 65 64 20 62 65 74 77 65 65 6e 20 0a 2a 2a  ared between .**
cc10: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
cc20: 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
cc30: 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
cc40: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
cc50: 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d 61 20 69  ase .** schema i
cc60: 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
cc70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
cc80: 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
cc90: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
cca0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
ccb0: 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
ccc0: 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
ccd0: 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
cce0: 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
ccf0: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
cd00: 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
cd10: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
cd20: 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
cd30: 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
cd40: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
cd50: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
cd60: 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
cd70: 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74 68 69 6e  ables .** within
cd80: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
cd90: 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
cda0: 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
cdb0: 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a 20 74 72  e callers .** tr
cdc0: 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
cdd0: 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
cde0: 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
cdf0: 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 20  e same database 
ce00: 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
ce10: 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
ce20: 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
ce30: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
ce40: 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
ce50: 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
ce60: 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
ce70: 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
ce80: 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
ce90: 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
cea0: 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
ceb0: 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
cec0: 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
ced0: 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
cee0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
cef0: 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
cf00: 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
cf10: 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
cf20: 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
cf30: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
cf40: 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
cf50: 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
cf60: 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
cf70: 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
cf80: 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
cf90: 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
cfa0: 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
cfb0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
cfc0: 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
cfd0: 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
cfe0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
cff0: 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
d000: 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
d010: 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
d020: 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
d030: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
d040: 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
d050: 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
d060: 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
d070: 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
d080: 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
d090: 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
d0a0: 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
d0b0: 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  ot .** deleted a
d0c0: 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
d0d0: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
d0e0: 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
d0f0: 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65 64 69 61  ()ed .** immedia
d100: 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74  tely. Instead, t
d110: 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72  hey are moved fr
d120: 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54  om the Table.pVT
d130: 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20  able list to.** 
d140: 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c  another linked l
d150: 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68  ist headed by th
d160: 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  e sqlite3.pDisco
d170: 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20  nnect member of 
d180: 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
d190: 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72  ding sqlite3 str
d1a0: 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65  ucture. They are
d1b0: 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44   then deleted/xD
d1c0: 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a 2a 2a 20  isconnected .** 
d1d0: 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
d1e0: 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
d1f0: 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
d200: 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
d210: 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
d220: 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
d230: 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
d240: 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
d250: 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
d260: 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
d270: 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
d280: 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
d290: 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
d2a0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
d2b0: 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
d2c0: 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
d2d0: 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
d2e0: 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
d2f0: 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
d300: 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
d310: 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
d320: 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
d330: 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
d340: 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
d350: 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
d360: 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a 2a 20 73  located by .** s
d370: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
d380: 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
d390: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
d3a0: 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
d3b0: 62 20 61 73 20 0a 2a 2a 20 74 68 65 20 66 69 72  b as .** the fir
d3c0: 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
d3d0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
d3e0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
d400: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
d410: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
d420: 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
d430: 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d450: 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
d460: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
d470: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
d480: 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
d490: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
d4a0: 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
d4b0: 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
d4c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
d4d0: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
d4e0: 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
d4f0: 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
d500: 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
d510: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
d520: 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
d530: 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
d540: 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
d550: 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
d560: 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
d570: 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
d580: 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
d590: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
d5a0: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
d5b0: 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
d5c0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 74 61  *.** Each SQL ta
d5d0: 62 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74  ble is represent
d5e0: 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
d5f0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
d600: 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20  he.** following 
d610: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
d620: 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20 69 73 20   Table.zName is 
d630: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
d640: 74 61 62 6c 65 2e 20 20 54 68 65 20 63 61 73 65  table.  The case
d650: 20 6f 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   of the original
d660: 0a 2a 2a 20 43 52 45 41 54 45 20 54 41 42 4c 45  .** CREATE TABLE
d670: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 73 74   statement is st
d680: 6f 72 65 64 2c 20 62 75 74 20 63 61 73 65 20 69  ored, but case i
d690: 73 20 6e 6f 74 20 73 69 67 6e 69 66 69 63 61 6e  s not significan
d6a0: 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70 61 72 69  t for.** compari
d6b0: 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c  sons..**.** Tabl
d6c0: 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65 20 6e 75  e.nCol is the nu
d6d0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
d6e0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 20  in this table.  
d6f0: 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73 20 61 0a  Table.aCol is a.
d700: 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e  ** pointer to an
d710: 20 61 72 72 61 79 20 6f 66 20 43 6f 6c 75 6d 6e   array of Column
d720: 20 73 74 72 75 63 74 75 72 65 73 2c 20 6f 6e 65   structures, one
d730: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
d740: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 74  ..**.** If the t
d750: 61 62 6c 65 20 68 61 73 20 61 6e 20 49 4e 54 45  able has an INTE
d760: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
d770: 20 74 68 65 6e 20 54 61 62 6c 65 2e 69 50 4b 65   then Table.iPKe
d780: 79 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  y is the index o
d790: 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20  f.** the column 
d7a0: 74 68 61 74 20 69 73 20 74 68 61 74 20 6b 65 79  that is that key
d7b0: 2e 20 20 20 4f 74 68 65 72 77 69 73 65 20 54 61  .   Otherwise Ta
d7c0: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 6e 65 67  ble.iPKey is neg
d7d0: 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a 2a 2a 20  ative.  Note.** 
d7e0: 74 68 61 74 20 74 68 65 20 64 61 74 61 74 79 70  that the datatyp
d7f0: 65 20 6f 66 20 74 68 65 20 50 52 49 4d 41 52 59  e of the PRIMARY
d800: 20 4b 45 59 20 6d 75 73 74 20 62 65 20 49 4e 54   KEY must be INT
d810: 45 47 45 52 20 66 6f 72 20 74 68 69 73 20 66 69  EGER for this fi
d820: 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20 73 65 74  eld to.** be set
d830: 2e 20 20 41 6e 20 49 4e 54 45 47 45 52 20 50 52  .  An INTEGER PR
d840: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 75 73 65  IMARY KEY is use
d850: 64 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 66  d as the rowid f
d860: 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66 0a 2a  or each row of.*
d870: 2a 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  * the table.  If
d880: 20 61 20 74 61 62 6c 65 20 68 61 73 20 6e 6f 20   a table has no 
d890: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d8a0: 4b 45 59 2c 20 74 68 65 6e 20 61 20 72 61 6e 64  KEY, then a rand
d8b0: 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69 73 20 67  om rowid.** is g
d8c0: 65 6e 65 72 61 74 65 64 20 66 6f 72 20 65 61 63  enerated for eac
d8d0: 68 20 72 6f 77 20 6f 66 20 74 68 65 20 74 61 62  h row of the tab
d8e0: 6c 65 2e 20 20 54 46 5f 48 61 73 50 72 69 6d 61  le.  TF_HasPrima
d8f0: 72 79 4b 65 79 20 69 73 20 73 65 74 20 69 66 0a  ryKey is set if.
d900: 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  ** the table has
d910: 20 61 6e 79 20 50 52 49 4d 41 52 59 20 4b 45 59   any PRIMARY KEY
d920: 2c 20 49 4e 54 45 47 45 52 20 6f 72 20 6f 74 68  , INTEGER or oth
d930: 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 61  erwise..**.** Ta
d940: 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74 68 65 20  ble.tnum is the 
d950: 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
d960: 74 68 65 20 72 6f 6f 74 20 42 54 72 65 65 20 70  the root BTree p
d970: 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
d980: 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   in the.** datab
d990: 61 73 65 20 66 69 6c 65 2e 20 20 49 66 20 54 61  ase file.  If Ta
d9a0: 62 6c 65 2e 69 44 62 20 69 73 20 74 68 65 20 69  ble.iDb is the i
d9b0: 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
d9c0: 62 61 73 65 20 74 61 62 6c 65 20 62 61 63 6b 65  base table backe
d9d0: 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69 74 65 2e  nd.** in sqlite.
d9e0: 61 44 62 5b 5d 2e 20 20 30 20 69 73 20 66 6f 72  aDb[].  0 is for
d9f0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
da00: 73 65 20 61 6e 64 20 31 20 69 73 20 66 6f 72 20  se and 1 is for 
da10: 74 68 65 20 66 69 6c 65 20 74 68 61 74 0a 2a 2a  the file that.**
da20: 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72 61 72 79   holds temporary
da30: 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69   tables and indi
da40: 63 65 73 2e 20 20 49 66 20 54 46 5f 45 70 68 65  ces.  If TF_Ephe
da50: 6d 65 72 61 6c 20 69 73 20 73 65 74 0a 2a 2a 20  meral is set.** 
da60: 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 69  then the table i
da70: 73 20 73 74 6f 72 65 64 20 69 6e 20 61 20 66 69  s stored in a fi
da80: 6c 65 20 74 68 61 74 20 69 73 20 61 75 74 6f 6d  le that is autom
da90: 61 74 69 63 61 6c 6c 79 20 64 65 6c 65 74 65 64  atically deleted
daa0: 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20 56 44 42  .** when the VDB
dab0: 45 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  E cursor to the 
dac0: 74 61 62 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e  table is closed.
dad0: 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 54    In this case T
dae0: 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a 20 72 65  able.tnum .** re
daf0: 66 65 72 73 20 56 44 42 45 20 63 75 72 73 6f 72  fers VDBE cursor
db00: 20 6e 75 6d 62 65 72 20 74 68 61 74 20 68 6f 6c   number that hol
db10: 64 73 20 74 68 65 20 74 61 62 6c 65 20 6f 70 65  ds the table ope
db20: 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65 20 72 6f  n, not to the ro
db30: 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75 6d 62 65  ot.** page numbe
db40: 72 2e 20 20 54 72 61 6e 73 69 65 6e 74 20 74 61  r.  Transient ta
db50: 62 6c 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  bles are used to
db60: 20 68 6f 6c 64 20 74 68 65 20 72 65 73 75 6c 74   hold the result
db70: 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62 2d 71 75  s of a.** sub-qu
db80: 65 72 79 20 74 68 61 74 20 61 70 70 65 61 72 73  ery that appears
db90: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 72 65   instead of a re
dba0: 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e  al table name in
dbb0: 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
dbc0: 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c 45 43 54   .** of a SELECT
dbd0: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
dbe0: 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
dbf0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
dc00: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
dc10: 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
dc20: 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
dc30: 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
dc40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
dc50: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
dc60: 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
dc70: 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
dc80: 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
dc90: 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
dca0: 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
dcb0: 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
dcc0: 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
dcd0: 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
dce0: 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
dcf0: 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
dd00: 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
dd10: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
dd20: 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
dd30: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
dd40: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
dd50: 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
dd60: 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
dd70: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
dd80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
dd90: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a 20 20 45  E_OMIT_CHECK.  E
dda0: 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
ddb0: 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
ddc0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
ddd0: 23 65 6e 64 69 66 0a 20 20 74 52 6f 77 63 6e 74  #endif.  tRowcnt
dde0: 20 6e 52 6f 77 45 73 74 3b 20 20 20 20 20 2f 2a   nRowEst;     /*
ddf0: 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
de00: 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
de10: 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
de20: 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  le */.  int tnum
de30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
de40: 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f 64 65 20  Root BTree node 
de50: 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 28  for this table (
de60: 73 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 29 20  see note above) 
de70: 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
de80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
de90: 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
dea0: 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
deb0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
dec0: 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
ded0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
dee0: 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
def0: 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
df00: 0a 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20  .  u16 nRef;    
df10: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
df20: 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f  r of pointers to
df30: 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20   this Table */. 
df40: 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77   LogEst szTabRow
df50: 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
df60: 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20  ed size of each 
df70: 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74  table row in byt
df80: 65 73 20 2a 2f 0a 20 20 75 38 20 74 61 62 46 6c  es */.  u8 tabFl
df90: 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
dfa0: 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c  Mask of TF_* val
dfb0: 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b 65 79 43  ues */.  u8 keyC
dfc0: 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
dfd0: 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
dfe0: 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
dff0: 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
e000: 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
e010: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
e020: 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
e030: 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
e040: 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
e050: 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
e060: 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
e070: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
e080: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
e090: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
e0a0: 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
e0b0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e0c0: 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
e0d0: 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
e0e0: 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
e0f0: 20 2f 2a 20 54 65 78 74 20 6f 66 20 61 6c 6c 20   /* Text of all 
e100: 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20 5b 30 5d  module args. [0]
e110: 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61 6d 65 20   is module name 
e120: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
e130: 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
e140: 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
e150: 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
e160: 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
e170: 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
e180: 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
e190: 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
e1a0: 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
e1b0: 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
e1c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
e1d0: 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
e1e0: 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
e1f0: 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
e200: 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
e210: 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
e220: 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
e230: 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
e240: 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65 66 69  bFlags..*/.#defi
e250: 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
e260: 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
e270: 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65   Read-only syste
e280: 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  m table */.#defi
e290: 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  ne TF_Ephemeral 
e2a0: 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
e2b0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61   An ephemeral ta
e2c0: 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
e2d0: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
e2e0: 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62    0x04    /* Tab
e2f0: 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  le has a primary
e300: 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
e310: 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  TF_Autoincrement
e320: 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e     0x08    /* In
e330: 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
e340: 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
e350: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
e360: 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20 20 20  _Virtual        
e370: 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61   0x10    /* Is a
e380: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
e390: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
e3a0: 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 32  houtRowid    0x2
e3b0: 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64  0    /* No rowid
e3c0: 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59 20 4b   used. PRIMARY K
e3d0: 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f  EY is the key */
e3e0: 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 63 75  .#define TF_Recu
e3f0: 72 73 69 76 65 20 20 20 20 20 20 20 30 78 34 30  rsive       0x40
e400: 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
e410: 20 72 65 66 65 72 65 6e 63 65 20 77 69 74 68 69   reference withi
e420: 6e 20 43 54 45 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  n CTE */.../*.**
e430: 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
e440: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
e450: 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
e460: 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
e470: 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
e480: 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
e490: 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
e4a0: 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
e4b0: 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
e4c0: 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
e4d0: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
e4e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e4f0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
e500: 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
e510: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
e520: 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
e530: 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a  TF_Virtual)!=0).
e540: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
e550: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
e560: 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
e570: 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
e580: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
e590: 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
e5a0: 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
e5b0: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
e5c0: 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ) 0.#endif../* D
e5d0: 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61  oes the table ha
e5e0: 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64  ve a rowid */.#d
e5f0: 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58  efine HasRowid(X
e600: 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62  )     (((X)->tab
e610: 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f  Flags & TF_Witho
e620: 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  utRowid)==0)../*
e630: 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
e640: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
e650: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
e660: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
e670: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
e680: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
e690: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
e6a0: 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
e6b0: 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
e6c0: 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
e6d0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
e6e0: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
e6f0: 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
e700: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
e710: 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
e720: 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
e730: 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
e740: 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
e750: 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
e760: 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
e770: 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
e780: 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
e790: 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
e7a0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
e7b0: 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
e7c0: 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
e7d0: 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
e7e0: 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
e7f0: 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
e800: 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
e810: 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
e820: 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
e830: 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
e840: 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
e850: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
e860: 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
e870: 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
e880: 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
e890: 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
e8a0: 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
e8b0: 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
e8c0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
e8d0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
e8e0: 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
e8f0: 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
e900: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
e910: 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
e920: 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
e930: 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
e940: 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
e950: 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
e960: 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
e970: 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
e980: 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
e990: 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
e9a0: 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
e9b0: 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
e9c0: 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
e9d0: 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
e9e0: 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
e9f0: 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
ea00: 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
ea10: 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
ea20: 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
ea30: 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
ea40: 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
ea50: 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
ea60: 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
ea70: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ea80: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
ea90: 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
eaa0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
eab0: 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
eac0: 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
ead0: 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
eae0: 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
eaf0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
eb00: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
eb10: 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
eb20: 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
eb30: 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
eb40: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
eb50: 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
eb60: 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
eb70: 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
eb80: 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
eb90: 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
eba0: 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
ebb0: 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
ebc0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
ebd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
ebe0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
ebf0: 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
ec00: 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
ec10: 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
ec20: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
ec30: 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
ec40: 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
ec50: 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
ec60: 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
ec70: 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
ec80: 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
ec90: 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
eca0: 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
ecb0: 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
ecc0: 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
ecd0: 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
ece0: 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
ecf0: 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
ed00: 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
ed10: 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
ed20: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
ed30: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
ed40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ed50: 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
ed60: 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
ed70: 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
ed80: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
ed90: 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
eda0: 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
edb0: 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
edc0: 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
edd0: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
ede0: 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
edf0: 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
ee00: 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
ee10: 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
ee20: 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
ee30: 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
ee40: 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
ee50: 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
ee60: 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
ee70: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
ee80: 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
ee90: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
eea0: 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
eeb0: 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
eec0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
eed0: 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
eee0: 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
eef0: 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
ef00: 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
ef10: 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
ef20: 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
ef30: 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
ef40: 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
ef50: 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
ef60: 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
ef70: 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
ef80: 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
ef90: 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
efa0: 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
efb0: 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
efc0: 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
efd0: 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
efe0: 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
eff0: 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
f000: 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
f010: 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
f020: 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
f030: 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
f040: 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
f050: 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
f060: 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
f070: 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
f080: 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
f090: 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
f0a0: 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
f0b0: 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
f0c0: 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
f0d0: 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
f0e0: 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
f0f0: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
f100: 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
f110: 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
f120: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
f130: 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
f140: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
f150: 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
f160: 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
f170: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
f180: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
f190: 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
f1a0: 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
f1b0: 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
f1c0: 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
f1d0: 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
f1e0: 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
f1f0: 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
f200: 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
f210: 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
f220: 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
f230: 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
f240: 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
f250: 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
f260: 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
f270: 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
f280: 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
f290: 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
f2a0: 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
f2b0: 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
f2c0: 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
f2d0: 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
f2e0: 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
f2f0: 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
f300: 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20 0a  oreign key..** .
f310: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
f320: 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73   symbolic values
f330: 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63   are used to rec
f340: 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a  ord which type.*
f350: 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74  * of action to t
f360: 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ake..*/.#define 
f370: 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20  OE_None     0   
f380: 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63  /* There is no c
f390: 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65  onstraint to che
f3a0: 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ck */.#define OE
f3b0: 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a  _Rollback 1   /*
f3c0: 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74   Fail the operat
f3d0: 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b  ion and rollback
f3e0: 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
f3f0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41   */.#define OE_A
f400: 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42  bort    2   /* B
f410: 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20  ack out changes 
f420: 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61  but do no rollba
f430: 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a  ck transaction *
f440: 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69  /.#define OE_Fai
f450: 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f  l     3   /* Sto
f460: 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  p the operation 
f470: 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72  but leave all pr
f480: 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ior changes */.#
f490: 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65  define OE_Ignore
f4a0: 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65     4   /* Ignore
f4b0: 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e   the error. Do n
f4c0: 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54  ot do the INSERT
f4d0: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64   or UPDATE */.#d
f4e0: 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65  efine OE_Replace
f4f0: 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20    5   /* Delete 
f500: 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c  existing record,
f510: 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20   then do INSERT 
f520: 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64  or UPDATE */..#d
f530: 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63  efine OE_Restric
f540: 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72  t 6   /* OE_Abor
f550: 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c  t for IMMEDIATE,
f560: 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72   OE_Rollback for
f570: 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65   DEFERRED */.#de
f580: 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20  fine OE_SetNull 
f590: 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   7   /* Set the 
f5a0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
f5b0: 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65  e to NULL */.#de
f5c0: 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20  fine OE_SetDflt 
f5d0: 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20   8   /* Set the 
f5e0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75  foreign key valu
f5f0: 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
f600: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43   */.#define OE_C
f610: 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43  ascade  9   /* C
f620: 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67  ascade the chang
f630: 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  es */..#define O
f640: 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f  E_Default  10  /
f650: 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68  * Do whatever th
f660: 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e  e default action
f670: 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41   is */.../*.** A
f680: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
f690: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
f6a0: 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
f6b0: 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20  as the first.** 
f6c0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69  argument to sqli
f6d0: 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72  te3VdbeKeyCompar
f6e0: 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f  e and is used to
f6f0: 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a 2a   control the .**
f700: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
f710: 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
f720: 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
f730: 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
f740: 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
f750: 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
f760: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
f770: 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
f780: 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
f790: 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
f7a0: 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
f7b0: 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
f7c0: 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
f7d0: 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
f7e0: 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
f7f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
f800: 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
f810: 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
f820: 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
f830: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
f840: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
f850: 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
f860: 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
f870: 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
f880: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f890: 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
f8a0: 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
f8b0: 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
f8c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f8d0: 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
f8e0: 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
f8f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
f900: 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
f910: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
f920: 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
f930: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
f940: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
f950: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
f960: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
f970: 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
f980: 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
f990: 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
f9a0: 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
f9b0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
f9c0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f9d0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
f9e0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f9f0: 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
fa00: 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
fa10: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
fa20: 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
fa30: 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
fa40: 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
fa50: 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
fa60: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
fa70: 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
fa80: 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
fa90: 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
faa0: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
fab0: 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
fac0: 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
fad0: 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
fae0: 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
faf0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
fb00: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
fb10: 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
fb20: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
fb30: 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
fb40: 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
fb50: 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
fb60: 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
fb70: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
fb80: 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
fb90: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
fba0: 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
fbb0: 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
fbc0: 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
fbd0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
fbe0: 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
fbf0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
fc00: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
fc10: 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
fc20: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
fc30: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
fc40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
fc50: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
fc60: 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  m[] */.  u8 flag
fc70: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
fc80: 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73  Boolean settings
fc90: 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20  .  UNPACKED_... 
fca0: 62 65 6c 6f 77 20 2a 2f 0a 20 20 4d 65 6d 20 2a  below */.  Mem *
fcb0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
fcc0: 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  * Values */.};..
fcd0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
fce0: 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64  lues of Unpacked
fcf0: 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a  Record.flags.*/.
fd00: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
fd10: 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30  _INCRKEY       0
fd20: 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69  x01  /* Make thi
fd30: 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e  s key an epsilon
fd40: 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69   larger */.#defi
fd50: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
fd60: 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32 20 20  IX_MATCH  0x02  
fd70: 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74 63  /* A prefix matc
fd80: 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  h is considered 
fd90: 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  OK */../*.** Eac
fda0: 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
fdb0: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
fdc0: 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
fdd0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
fde0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
fdf0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
fe00: 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
fe10: 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
fe20: 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
fe30: 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
fe40: 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
fe50: 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
fe60: 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
fe70: 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
fe80: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
fe90: 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
fea0: 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
feb0: 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
fec0: 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
fed0: 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
fee0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
fef0: 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
ff00: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
ff10: 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
ff20: 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
ff30: 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
ff40: 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
ff50: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
ff60: 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
ff70: 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
ff80: 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
ff90: 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
ffa0: 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
ffb0: 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
ffc0: 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
ffd0: 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
ffe0: 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
fff0: 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
10000 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
10010 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
10020 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
10030 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
10040 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
10050 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
10060 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
10070 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
10080 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
10090 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
100a0 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
100b0 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
100c0 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
100d0 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
100e0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
100f0 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
10100 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
10110 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
10120 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
10130 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
10140 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
10150 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
10160 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
10170 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
10180 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
10190 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
101a0 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
101b0 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
101c0 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
101d0 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
101e0 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
101f0 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
10200 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
10210 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
10220 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
10230 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
10240 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
10250 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10260 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10270 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
10280 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
10290 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
102a0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
102b0 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
102c0 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
102d0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
102e0 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f  st;       /* Fro
102f0 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
10300 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
10310 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
10320 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
10330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10340 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
10350 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
10360 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
10370 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
10380 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
10390 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
103a0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
103b0 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
103c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
103d0 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
103e0 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
103f0 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
10400 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
10410 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
10420 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
10430 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
10440 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
10450 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
10460 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
10470 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
10480 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
10490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
104a0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
104b0 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
104c0 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
104d0 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
104e0 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
104f0 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
10500 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
10510 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10520 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 4b  fo;       /* A K
10530 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 73 75  eyInfo object su
10540 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20  itable for this 
10550 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 74  index */.  int t
10560 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
10570 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
10580 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
10590 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
105a0 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
105b0 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
105c0 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
105d0 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
105e0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
105f0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
10600 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
10610 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
10620 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
10630 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
10640 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10650 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
10660 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
10670 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
10680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
10690 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
106a0 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
106b0 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
106c0 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64 65 78  signed autoIndex
106d0 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  :2;    /* 1==UNI
106e0 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
106f0 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
10700 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
10710 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
10720 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
10730 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
10740 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
10750 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
10760 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
10770 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
10780 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
10790 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
107a0 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
107b0 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
107c0 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
107d0 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
107e0 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
107f0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
10800 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
10810 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
10820 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 23 69  ring index */.#i
10830 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
10840 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
10850 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10870 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
10880 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
10890 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
108a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
108b0 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
108c0 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
108d0 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
108e0 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
108f0 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
10900 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
10910 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
10920 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
10930 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
10940 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
10950 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
10960 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
10970 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
10980 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
10990 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
109a0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
109b0 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 75 73  in memory .** us
109c0 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20  ing a structure 
109d0 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53  of this type.  S
109e0 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ee documentation
109f0 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
10a00 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20  he.** analyze.c 
10a10 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20  source file for 
10a20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
10a30 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
10a40 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a  t IndexSample {.
10a50 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20    void *p;      
10a60 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
10a70 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64  o sampled record
10a80 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20   */.  int n;    
10a90 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
10aa0 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74  of record in byt
10ab0 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  es */.  tRowcnt 
10ac0 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74  *anEq;    /* Est
10ad0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
10ae0 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65   where the key e
10af0 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c  quals this sampl
10b00 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
10b10 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anLt;    /* Est.
10b20 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
10b30 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73  where key is les
10b40 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70  s than this samp
10b50 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
10b60 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74  *anDLt;   /* Est
10b70 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74  . number of dist
10b80 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74  inct keys less t
10b90 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
10ba0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
10bb0 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f  h token coming o
10bc0 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20  ut of the lexer 
10bd0 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
10be0 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74  f.** this struct
10bf0 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65  ure.  Tokens are
10c00 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61   also used as pa
10c10 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  rt of an express
10c20 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ion..**.** Note 
10c30 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68  if Token.z==0 th
10c40 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64  en Token.dyn and
10c50 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64   Token.n are und
10c60 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61  efined and.** ma
10c70 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d  y contain random
10c80 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74   values.  Do not
10c90 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70   make any assump
10ca0 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65  tions about Toke
10cb0 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b  n.dyn.** and Tok
10cc0 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e  en.n when Token.
10cd0 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  z==0..*/.struct 
10ce0 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20  Token {.  const 
10cf0 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20  char *z;     /* 
10d00 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65  Text of the toke
10d10 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72  n.  Not NULL-ter
10d20 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e  minated! */.  un
10d30 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20  signed int n;   
10d40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68   /* Number of ch
10d50 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73  aracters in this
10d60 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   token */.};../*
10d70 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
10d80 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
10d90 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
10da0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
10db0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
10dc0 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74  e for a SELECT t
10dd0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67  hat contains agg
10de0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
10df0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e  ..**.** If Expr.
10e00 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d  op==TK_AGG_COLUM
10e10 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43  N or TK_AGG_FUNC
10e20 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70  TION then Expr.p
10e30 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20  AggInfo is a.** 
10e40 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
10e50 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20  structure.  The 
10e60 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65  Expr.iColumn fie
10e70 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  ld is the index 
10e80 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43  in.** AggInfo.aC
10e90 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e  ol[] or AggInfo.
10ea0 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72  aFunc[] of infor
10eb0 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f  mation needed to
10ec0 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64   generate.** cod
10ed0 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e  e for that node.
10ee0 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70  .**.** AggInfo.p
10ef0 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49  GroupBy and AggI
10f00 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20  nfo.aFunc.pExpr 
10f10 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20  point to fields 
10f20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72  within the.** or
10f30 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74  iginal Select st
10f40 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73  ructure that des
10f50 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43  cribes the SELEC
10f60 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68  T statement.  Th
10f70 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f  ese.** fields do
10f80 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20   not need to be 
10f90 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c  freed when deall
10fa0 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49  ocating the AggI
10fb0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  nfo structure..*
10fc0 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f  /.struct AggInfo
10fd0 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f   {.  u8 directMo
10fe0 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  de;          /* 
10ff0 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67  Direct rendering
11000 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65   mode means take
11010 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20   data directly. 
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d           ** from
11040 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72   source tables r
11050 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20  ather than from 
11060 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a  accumulators */.
11070 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49    u8 useSortingI
11080 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20  dx;       /* In 
11090 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66  direct mode, ref
110a0 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69  erence the sorti
110b0 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a  ng index rather.
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61            ** tha
110e0 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
110f0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  le */.  int sort
11100 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20  ingIdx;         
11110 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
11120 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20   of the sorting 
11130 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73  index */.  int s
11140 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20  ortingIdxPTab;  
11150 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d     /* Cursor num
11160 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61  ber of pseudo-ta
11170 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f  ble */.  int nSo
11180 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20  rtingColumn;    
11190 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
111a0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72  lumns in the sor
111b0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
111c0 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67  int mnReg, mxReg
111d0 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65  ;       /* Range
111e0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
111f0 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c  located for aCol
11200 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20   and aFunc */.  
11210 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
11220 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67  By;     /* The g
11230 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a  roup by clause *
11240 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
11250 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46  fo_col {    /* F
11260 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75  or each column u
11270 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61  sed in source ta
11280 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c  bles */.    Tabl
11290 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
112a0 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74       /* Source t
112b0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
112c0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
112d0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
112e0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75  umber of the sou
112f0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
11300 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   int iColumn;   
11310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c            /* Col
11320 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69  umn number withi
11330 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  n the source tab
11340 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53  le */.    int iS
11350 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20  orterColumn;    
11360 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
11370 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69  ber in the sorti
11380 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  ng index */.    
11390 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
113a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
113b0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
113c0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
113d0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72  ator */.    Expr
113e0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
113f0 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67       /* The orig
11400 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20  inal expression 
11410 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20  */.  } *aCol;.  
11420 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  int nColumn;    
11430 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
11440 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65  r of used entrie
11450 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20  s in aCol[] */. 
11460 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f   int nAccumulato
11470 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
11480 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68  er of columns th
11490 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20  at show through 
114a0 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20  to the output.. 
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69           ** Addi
114d0 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61  tional columns a
114e0 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20  re used only as 
114f0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20  parameters to.  
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65          ** aggre
11520 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
11530 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e  /.  struct AggIn
11540 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46  fo_func {   /* F
11550 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74  or each aggregat
11560 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
11570 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
11580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
11590 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e  pression encodin
115a0 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a  g the function *
115b0 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  /.    FuncDef *p
115c0 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f  Func;          /
115d0 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20  * The aggregate 
115e0 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  function impleme
115f0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ntation */.    i
11600 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
11610 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
11620 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
11630 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
11640 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  tor */.    int i
11650 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20  Distinct;       
11660 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c      /* Ephemeral
11670 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65   table used to e
11680 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20  nforce DISTINCT 
11690 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20  */.  } *aFunc;. 
116a0 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20   int nFunc;     
116b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
116c0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
116d0 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a   aFunc[] */.};..
116e0 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
116f0 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69  pe ynVar is a si
11700 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69  gned integer, ei
11710 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33  ther 16-bit or 3
11720 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c  2-bit..** Usuall
11730 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e  y it is 16-bits.
11740 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f    But if SQLITE_
11750 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MAX_VARIABLE_NUM
11760 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a  BER is greater.*
11770 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20  * than 32767 we 
11780 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20  have to make it 
11790 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20  32-bit.  16-bit 
117a0 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63  is preferred bec
117b0 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20  ause.** it uses 
117c0 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74  less memory in t
117d0 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20  he Expr object, 
117e0 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d  which is a big m
117f0 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e  emory user.** in
11800 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f   systems with lo
11810 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73  ts of prepared s
11820 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20  tatements.  And 
11830 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73  few applications
11840 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68  .** need more th
11850 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32  an about 10 or 2
11860 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75  0 variables.  Bu
11870 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75  t some extreme u
11880 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20  sers want.** to 
11890 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74  have prepared st
118a0 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76  atements with ov
118b0 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c  er 32767 variabl
118c0 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d  es, and for them
118d0 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69  .** the option i
118e0 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20  s available (at 
118f0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a  compile-time)..*
11900 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
11910 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
11920 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20  <=32767.typedef 
11930 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65  i16 ynVar;.#else
11940 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56  .typedef int ynV
11950 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ar;.#endif../*.*
11960 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61  * Each node of a
11970 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  n expression in 
11980 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69  the parse tree i
11990 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
119a0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
119b0 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f  re..**.** Expr.o
119c0 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e  p is the opcode.
119d0 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72   The integer par
119e0 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20  ser token codes 
119f0 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73  are reused.** as
11a00 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46   opcodes here. F
11a10 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20  or example, the 
11a20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54  parser defines T
11a30 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e  K_GE to be an in
11a40 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65  teger.** code re
11a50 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22  presenting the "
11a60 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68  >=" operator. Th
11a70 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20  is same integer 
11a80 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a  code is reused.*
11a90 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74  * to represent t
11aa0 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d  he greater-than-
11ab0 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72  or-equal-to oper
11ac0 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72  ator in the expr
11ad0 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a  ession.** tree..
11ae0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
11af0 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
11b00 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e  L literal (TK_IN
11b10 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c  TEGER, TK_FLOAT,
11b20 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20 6f 72   TK_BLOB, .** or
11b30 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
11b40 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
11b50 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
11b60 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
11b70 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
11b80 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
11b90 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
11ba0 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
11bb0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
11bc0 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  e .** variable n
11bd0 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  ame. Finally, if
11be0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11bf0 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
11c00 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29  on (TK_FUNCTION)
11c10 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74  ,.** then Expr.t
11c20 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
11c30 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  e name of the fu
11c40 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78  nction..**.** Ex
11c50 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78  pr.pRight and Ex
11c60 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65  pr.pLeft are the
11c70 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20   left and right 
11c80 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  subexpressions o
11c90 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70  f a.** binary op
11ca0 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f  erator. Either o
11cb0 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55  r both may be NU
11cc0 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78  LL..**.** Expr.x
11cd0 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74  .pList is a list
11ce0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66   of arguments if
11cf0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
11d00 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69  is an SQL functi
11d10 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78  on,.** a CASE ex
11d20 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49  pression or an I
11d30 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20  N expression of 
11d40 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
11d50 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29  IN (<y>, <z>...)
11d60 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65  "..** Expr.x.pSe
11d70 6c 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20  lect is used if 
11d80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
11d90 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f  s a sub-select o
11da0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
11db0 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22  of.** the form "
11dc0 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54  <lhs> IN (SELECT
11dd0 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45   ...)". If the E
11de0 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20  P_xIsSelect bit 
11df0 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a  is set in the.**
11e00 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
11e10 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53  , then Expr.x.pS
11e20 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20  elect is valid. 
11e30 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e  Otherwise, Expr.
11e40 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a 20 76  x.pList is .** v
11e50 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65  alid..**.** An e
11e60 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
11e70 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49   form ID or ID.I
11e80 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f  D refers to a co
11e90 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e  lumn in a table.
11ea0 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70  .** For such exp
11eb0 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f  ressions, Expr.o
11ec0 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43  p is set to TK_C
11ed0 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69  OLUMN and Expr.i
11ee0 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  Table is.** the 
11ef0 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e  integer cursor n
11f00 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45 20  umber of a VDBE 
11f10 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
11f20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e  to that table an
11f30 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d  d.** Expr.iColum
11f40 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  n is the column 
11f50 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73  number for the s
11f60 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20  pecific column. 
11f70 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65   If the.** expre
11f80 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73  ssion is used as
11f90 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20   a result in an 
11fa0 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43 54  aggregate SELECT
11fb0 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
11fc0 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72  lue is also stor
11fd0 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69  ed in the Expr.i
11fe0 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  Agg column in th
11ff0 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20 74  e aggregate so t
12000 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65  hat.** it can be
12010 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72 20   accessed after 
12020 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20 61  all aggregates a
12030 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a  re computed..**.
12040 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
12050 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75  sion is an unbou
12060 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b  nd variable mark
12070 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d  er (a question m
12080 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63 74 65  ark .** characte
12090 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
120a0 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
120b0 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
120c0 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 20  holds the index 
120d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
120e0 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
120f0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
12100 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
12110 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
12120 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
12130 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
12140 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
12150 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
12160 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
12170 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
12180 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
12190 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
121a0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
121b0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
121c0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
121d0 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
121e0 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
121f0 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
12200 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
12210 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
12220 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
12230 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
12240 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
12250 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
12260 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
12270 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
12280 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
12290 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
122a0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
122b0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
122c0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
122d0 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
122e0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
122f0 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
12300 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
12310 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
12320 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
12330 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
12340 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
12350 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
12360 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
12370 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
12380 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
12390 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
123a0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
123b0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
123c0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
123d0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
123e0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
123f0 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
12400 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
12410 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
12420 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
12430 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
12440 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
12450 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
12460 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
12470 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
12480 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
12490 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
124a0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
124b0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
124c0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
124d0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
124e0 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
124f0 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
12500 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
12510 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
12520 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
12530 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
12540 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
12550 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12560 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
12570 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
12580 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
12590 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
125a0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
125b0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
125c0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
125d0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
125e0 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
125f0 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
12600 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
12610 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
12620 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
12630 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
12640 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
12650 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
12660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
12670 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
12680 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
12690 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
126a0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
126b0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
126c0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
126d0 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
126e0 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
126f0 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
12700 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
12710 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
12720 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
12730 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
12740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
12750 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
12760 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
12770 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
12780 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
12790 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
127a0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
127b0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
127c0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
127d0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
127e0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
127f0 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
12800 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
12810 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
12820 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
12830 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
12840 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20 2a 2a  lfunction. .  **
12850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12870 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12890 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c  ***/..  Expr *pL
128a0 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  eft;           /
128b0 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a  * Left subnode *
128c0 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74  /.  Expr *pRight
128d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69  ;          /* Ri
128e0 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20  ght subnode */. 
128f0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70   union {.    Exp
12900 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20  rList *pList;   
12910 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58    /* op = IN, EX
12920 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41  ISTS, SELECT, CA
12930 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45  SE, FUNCTION, BE
12940 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c  TWEEN */.    Sel
12950 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
12960 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63    /* EP_xIsSelec
12970 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45  t and op = IN, E
12980 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f  XISTS, SELECT */
12990 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66  .  } x;..  /* If
129a0 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
129b0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
129c0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
129d0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
129e0 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
129f0 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
12a00 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
12a10 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
12a20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
12a30 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
12a40 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
12a50 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
12a60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12a90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12aa0 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49  *****/..#if SQLI
12ab0 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
12ac0 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68  H>0.  int nHeigh
12ad0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
12ae0 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72  Height of the tr
12af0 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69  ee headed by thi
12b00 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  s node */.#endif
12b10 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20  .  int iTable;  
12b20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
12b30 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e  COLUMN: cursor n
12b40 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68  umber of table h
12b50 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20  olding column.  
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47         ** TK_REG
12b80 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20  ISTER: register 
12b90 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20  number.         
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31  ** TK_TRIGGER: 1
12bc0 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c   -> new, 0 -> ol
12bd0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
12be0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50             ** EP
12bf0 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30 30 30  _Unlikely:  1000
12c00 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
12c10 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  d */.  ynVar iCo
12c20 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
12c30 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
12c40 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
12c50 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
12c80 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
12c90 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
12ca0 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20   */.  i16 iAgg; 
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12cc0 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70  Which entry in p
12cd0 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20  AggInfo->aCol[] 
12ce0 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a  or ->aFunc[] */.
12cf0 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e    i16 iRightJoin
12d00 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45  Table;   /* If E
12d10 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20  P_FromJoin, the 
12d20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74  right table of t
12d30 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20  he join */.  u8 
12d40 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20  op2;            
12d50 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54      /* TK_REGIST
12d60 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c  ER: original val
12d70 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20  ue of Expr.op.  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c         ** TK_COL
12da0 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f  UMN: the value o
12db0 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75  f p5 for OP_Colu
12dc0 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
12de0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20  K_AGG_FUNCTION: 
12df0 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f  nesting depth */
12e00 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67  .  AggInfo *pAgg
12e10 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65  Info;     /* Use
12e20 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55  d by TK_AGG_COLU
12e30 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55  MN and TK_AGG_FU
12e40 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c  NCTION */.  Tabl
12e50 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
12e60 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20     /* Table for 
12e70 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73  TK_COLUMN expres
12e80 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sions. */.};../*
12e90 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
12ea0 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
12eb0 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
12ec0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
12ed0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
12ee0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
12ef0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
12f00 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53 49 4e  ed in ON or USIN
12f10 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
12f20 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
12f30 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
12f40 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
12f50 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
12f60 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
12f70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
12f80 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
12f90 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
12fa0 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
12fb0 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
12fc0 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
12fd0 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
12fe0 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
12ff0 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
13000 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
13010 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
13020 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
13030 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
13040 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
13050 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
13060 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
13070 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
13080 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
13090 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
130a0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
130b0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
130c0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
130d0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
130e0 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
130f0 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
13100 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
13110 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
13120 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
13130 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
13140 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
13150 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
13160 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72 74 6f  _COLLATE opearto
13170 72 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 75 6e  r */.      /* un
13180 75 73 65 64 20 20 20 20 20 20 30 78 30 30 30 32  used      0x0002
13190 30 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  00 */.#define EP
131a0 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
131b0 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
131c0 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
131d0 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
131e0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
131f0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
13200 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
13210 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
13220 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
13230 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
13240 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
13250 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
13260 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
13270 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
13280 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
13290 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
132a0 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
132b0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
132c0 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
132d0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
132e0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
132f0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
13300 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
13310 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
13320 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
13330 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
13340 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
13350 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
13360 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
13370 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
13380 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
13390 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
133a0 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
133b0 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
133c0 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
133d0 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
133e0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
133f0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
13400 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
13410 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
13420 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
13430 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38 30 30  Constant  0x0800
13440 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20 61 20  00 /* Node is a 
13450 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a  constant */../*.
13460 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
13470 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
13480 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
13490 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a  ar bits in the .
134a0 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
134b0 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
134c0 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
134d0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
134e0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
134f0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
13500 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
13510 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
13520 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
13530 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
13540 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
13550 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
13560 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
13570 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
13580 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
13590 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
135a0 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
135b0 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
135c0 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
135d0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
135e0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
135f0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
13600 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
13610 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
13620 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
13630 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
13640 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
13650 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
13660 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
13670 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
13680 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
13690 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
136a0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
136b0 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
136c0 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
136d0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
136e0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
136f0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
13700 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63 74 2c  Expr .** struct,
13710 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
13720 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
13730 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
13740 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a 20 61  Expr.flags .** a
13750 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
13760 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
13770 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
13780 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
13790 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
137a0 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
137b0 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
137c0 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
137d0 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
137e0 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
137f0 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
13800 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
13810 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
13820 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
13830 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
13840 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
13850 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
13860 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
13870 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
13880 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
13890 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
138a0 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
138b0 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  t .** above sqli
138c0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
138d0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
138e0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
138f0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
13900 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
13910 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
13920 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
13930 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
13940 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
13950 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
13960 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
13970 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
13980 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
13990 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
139a0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
139b0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
139c0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
139d0 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
139e0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
139f0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
13a00 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
13a10 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
13a20 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
13a30 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
13a40 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
13a50 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
13a60 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
13a70 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
13a80 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
13a90 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
13aa0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
13ab0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
13ac0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
13ad0 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
13ae0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
13af0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
13b00 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
13b10 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
13b20 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
13b30 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
13b40 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
13b50 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
13b60 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
13b70 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
13b80 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
13b90 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
13ba0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
13bb0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
13bc0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
13bd0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
13be0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
13bf0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
13c00 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
13c10 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
13c20 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
13c30 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
13c40 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
13c50 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
13c60 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
13c70 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
13c80 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
13c90 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
13ca0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
13cb0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13cc0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
13cd0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
13ce0 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72 3b 20    int iECursor; 
13cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44 42 45           /* VDBE
13d00 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69 61 74   Cursor associat
13d10 65 64 20 77 69 74 68 20 74 68 69 73 20 45 78 70  ed with this Exp
13d20 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63  rList */.  struc
13d30 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
13d40 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
13d50 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
13d60 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
13d70 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
13d80 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20      /* The list 
13d90 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  of expressions *
13da0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
13db0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
13dc0 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
13dd0 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
13de0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
13df0 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
13e00 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
13e10 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
13e20 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
13e30 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
13e40 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
13e50 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
13e60 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
13e70 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
13e80 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
13e90 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
13ea0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
13eb0 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
13ec0 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
13ed0 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
13ee0 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
13ef0 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
13f00 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
13f10 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
13f20 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
13f30 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
13f40 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
13f50 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
13f60 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
13f70 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
13f80 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
13f90 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
13fa0 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
13fb0 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
13fc0 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
13fd0 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
13fe0 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
13ff0 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
14000 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
14010 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
14020 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
14030 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
14040 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
14070 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
14080 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
14090 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
140a0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
140b0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
140c0 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
140d0 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
140e0 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
140f0 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
14100 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
14110 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
14120 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
14130 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
14140 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
14150 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
14160 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
14170 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
14180 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
14190 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
141a0 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
141b0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
141c0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
141d0 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
141e0 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
141f0 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
14200 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
14210 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
14220 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
14230 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
14240 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
14250 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
14260 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
14270 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
14280 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
14290 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
142a0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
142b0 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
142c0 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
142d0 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
142e0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
142f0 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
14300 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
14310 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
14320 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
14330 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
14340 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
14350 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
14360 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
14370 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
14380 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
14390 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
143a0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
143b0 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
143c0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
143d0 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
143e0 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
143f0 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
14400 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
14410 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
14420 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
14430 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
14440 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
14450 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
14460 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
14470 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
14480 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
14490 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
144a0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
144b0 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
144c0 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
144d0 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
144e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
144f0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
14500 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
14510 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
14520 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
14530 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
14540 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
14550 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
14560 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
14570 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
14580 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
14590 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
145a0 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
145b0 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
145c0 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
145d0 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
145e0 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
145f0 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
14600 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
14610 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  x86..*/.typedef 
14620 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a 2f 2a  u64 Bitmask;../*
14630 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
14640 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
14650 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
14660 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
14670 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
14680 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
14690 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
146a0 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
146b0 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
146c0 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
146d0 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
146e0 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  ))../*.** The fo
146f0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14700 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
14710 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
14720 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
14730 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
14740 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
14750 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
14760 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
14770 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
14780 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
14790 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
147a0 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
147b0 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
147c0 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
147d0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
147e0 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
147f0 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
14800 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
14810 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
14820 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
14830 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
14840 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
14850 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
14860 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
14870 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
14880 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
14890 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
148a0 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
148b0 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
148c0 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
148d0 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
148e0 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
148f0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
14900 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
14910 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
14920 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
14930 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
14940 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
14950 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
14960 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
14970 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
14980 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
14990 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
149a0 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
149b0 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
149c0 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
149d0 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
149e0 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
149f0 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
14a00 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
14a10 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
14a20 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
14a30 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
14a40 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
14a50 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
14a60 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
14a70 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
14a80 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
14a90 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
14aa0 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
14ab0 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
14ac0 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
14ad0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
14ae0 0a 20 20 75 38 20 6e 53 72 63 3b 20 20 20 20 20  .  u8 nSrc;     
14af0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14b00 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
14b10 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
14b20 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 38 20   clause */.  u8 
14b30 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  nAlloc;      /* 
14b40 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
14b50 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61  s allocated in a
14b60 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74  [] below */.  st
14b70 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
14b80 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a  m {.    Schema *
14b90 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68  pSchema;  /* Sch
14ba0 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69  ema to which thi
14bb0 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20  s item is fixed 
14bc0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61  */.    char *zDa
14bd0 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65  tabase;  /* Name
14be0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
14bf0 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  ding this table 
14c00 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  */.    char *zNa
14c10 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
14c20 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f   of the table */
14c30 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61  .    char *zAlia
14c40 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42  s;     /* The "B
14c50 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41  " part of a "A A
14c60 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e  S B" phrase.  zN
14c70 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a  ame is the "A" *
14c80 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
14c90 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51  b;      /* An SQ
14ca0 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f  L table correspo
14cb0 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a  nding to zName *
14cc0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
14cd0 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c  elect;  /* A SEL
14ce0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73  ECT statement us
14cf0 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61  ed in place of a
14d00 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20   table name */. 
14d10 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53     int addrFillS
14d20 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20  ub;  /* Address 
14d30 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f  of subroutine to
14d40 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71   manifest a subq
14d50 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20  uery */.    int 
14d60 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a  regReturn;    /*
14d70 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
14d80 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73  g return address
14d90 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20   of addrFillSub 
14da0 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  */.    u8 jointy
14db0 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
14dc0 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
14dd0 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64 20 74   this able and t
14de0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
14df0 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
14e00 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
14e10 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
14e20 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
14e30 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 75 6e  clause */.    un
14e40 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
14e50 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
14e60 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
14e70 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
14e80 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
14e90 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
14ea0 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
14eb0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
14ec0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
14ed0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
14ee0 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
14ef0 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
14f00 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
14f10 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
14f20 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
14f30 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
14f40 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
14f50 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
14f60 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
14f70 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
14f80 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
14f90 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
14fa0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
14fb0 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
14fc0 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
14fd0 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
14fe0 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
14ff0 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
15000 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
15010 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
15020 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
15030 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 3b     char *zIndex;
15040 20 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69       /* Identifi
15050 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
15060 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
15070 61 75 73 65 20 2a 2f 0a 20 20 20 20 49 6e 64 65  ause */.    Inde
15080 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 2f 2a  x *pIndex;    /*
15090 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
150a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
150b0 6f 20 7a 49 6e 64 65 78 2c 20 69 66 20 61 6e 79  o zIndex, if any
150c0 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   */.  } a[1];   
150d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
150e0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
150f0 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68  identifier on th
15100 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
15110 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61  .** Permitted va
15120 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c  lues of the SrcL
15130 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66  ist.a.jointype f
15140 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ield.*/.#define 
15150 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30  JT_INNER     0x0
15160 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69  001    /* Any ki
15170 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63  nd of inner or c
15180 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ross join */.#de
15190 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20  fine JT_CROSS   
151a0 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45    0x0002    /* E
151b0 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74  xplicit use of t
151c0 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64  he CROSS keyword
151d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e   */.#define JT_N
151e0 41 54 55 52 41 4c 20 20 20 30 78 30 30 30 34 20  ATURAL   0x0004 
151f0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61     /* True for a
15200 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20   "natural" join 
15210 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45  */.#define JT_LE
15220 46 54 20 20 20 20 20 20 30 78 30 30 30 38 20 20  FT      0x0008  
15230 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20    /* Left outer 
15240 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
15250 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30 78 30  JT_RIGHT     0x0
15260 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20  010    /* Right 
15270 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
15280 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20  efine JT_OUTER  
15290 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20     0x0020    /* 
152a0 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77  The "OUTER" keyw
152b0 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a  ord is present *
152c0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52  /.#define JT_ERR
152d0 4f 52 20 20 20 20 20 30 78 30 30 34 30 20 20 20  OR     0x0040   
152e0 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75   /* unknown or u
152f0 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20  nsupported join 
15300 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  type */.../*.** 
15310 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69 61 74  Flags appropriat
15320 65 20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46  e for the wctrlF
15330 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f  lags parameter o
15340 66 20 73 71 6c 69 74 65 33 57 68 65 72 65 42 65  f sqlite3WhereBe
15350 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65  gin().** and the
15360 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c   WhereInfo.wctrl
15370 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f  Flags member..*/
15380 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
15390 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
153a0 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
153b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
153c0 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
153d0 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
153e0 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
153f0 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
15400 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
15410 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
15420 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
15430 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
15440 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
15450 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
15460 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
15470 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
15480 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
15490 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
154a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50  define WHERE_DUP
154b0 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78  LICATES_OK    0x
154c0 30 30 30 38 20 2f 2a 20 4f 6b 20 74 6f 20 72 65  0008 /* Ok to re
154d0 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20  turn a row more 
154e0 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65  than once */.#de
154f0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4d 49 54 5f  fine WHERE_OMIT_
15500 4f 50 45 4e 5f 43 4c 4f 53 45 20 20 30 78 30 30  OPEN_CLOSE  0x00
15510 31 30 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73  10 /* Table curs
15520 6f 72 73 20 61 72 65 20 61 6c 72 65 61 64 79 20  ors are already 
15530 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
15540 57 48 45 52 45 5f 46 4f 52 43 45 5f 54 41 42 4c  WHERE_FORCE_TABL
15550 45 20 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  E      0x0020 /*
15560 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 6e 20 69   Do not use an i
15570 6e 64 65 78 2d 6f 6e 6c 79 20 73 65 61 72 63 68  ndex-only search
15580 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15590 45 5f 4f 4e 45 54 41 42 4c 45 5f 4f 4e 4c 59 20  E_ONETABLE_ONLY 
155a0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 4f 6e 6c     0x0040 /* Onl
155b0 79 20 63 6f 64 65 20 74 68 65 20 31 73 74 20 74  y code the 1st t
155c0 61 62 6c 65 20 69 6e 20 70 54 61 62 4c 69 73 74  able in pTabList
155d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
155e0 45 5f 41 4e 44 5f 4f 4e 4c 59 20 20 20 20 20 20  E_AND_ONLY      
155f0 20 20 20 30 78 30 30 38 30 20 2f 2a 20 44 6f 6e     0x0080 /* Don
15600 27 74 20 75 73 65 20 69 6e 64 69 63 65 73 20 66  't use indices f
15610 6f 72 20 4f 52 20 74 65 72 6d 73 20 2a 2f 0a 23  or OR terms */.#
15620 64 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f  define WHERE_GRO
15630 55 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78  UPBY          0x
15640 30 31 30 30 20 2f 2a 20 70 4f 72 64 65 72 42 79  0100 /* pOrderBy
15650 20 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f   is really a GRO
15660 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
15670 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42   WHERE_DISTINCTB
15680 59 20 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  Y       0x0200 /
15690 2a 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65  * pOrderby is re
156a0 61 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20  ally a DISTINCT 
156b0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
156c0 65 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53  e WHERE_WANT_DIS
156d0 54 49 4e 43 54 20 20 20 20 30 78 30 34 30 30 20  TINCT    0x0400 
156e0 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65  /* All output ne
156f0 65 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e  eds to be distin
15700 63 74 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ct */../* Allowe
15710 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
15720 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
15730 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
15740 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15750 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
15760 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
15770 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
15780 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
15790 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
157a0 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
157b0 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
157c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
157d0 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
157e0 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
157f0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
15800 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15810 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
15820 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
15830 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
15840 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
15850 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
15860 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
15870 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
15880 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
15890 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
158a0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
158b0 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
158c0 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
158d0 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
158e0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
158f0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
15900 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
15910 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
15920 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
15930 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
15940 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
15950 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
15960 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
15970 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
15980 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
15990 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
159a0 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
159b0 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
159c0 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
159d0 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
159e0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
159f0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
15a00 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
15a10 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
15a20 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
15a30 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
15a40 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 20   the inner-most 
15a50 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73  .** context is s
15a60 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20  earched first.  
15a70 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66  If no match is f
15a80 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f  ound, the next o
15a90 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  uter.** context 
15aa0 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20  is checked.  If 
15ab0 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e  there is still n
15ac0 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78  o match, the nex
15ad0 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20  t context.** is 
15ae0 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70  checked.  This p
15af0 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73  rocess continues
15b00 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20   until either a 
15b10 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a  match is found.*
15b20 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74  * or all context
15b30 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68  s are check.  Wh
15b40 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  en a match is fo
15b50 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65  und, the nRef me
15b60 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63  mber of.** the c
15b70 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e  ontext containin
15b80 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69  g the match is i
15b90 6e 63 72 65 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a  ncremented. .**.
15ba0 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
15bb0 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
15bc0 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
15bd0 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
15be0 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
15bf0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
15c00 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
15c10 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
15c20 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
15c30 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
15c40 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
15c50 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
15c60 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
15c70 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
15c80 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
15c90 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
15ca0 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
15cb0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
15cc0 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
15cd0 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
15ce0 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
15cf0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
15d00 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
15d10 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
15d20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
15d30 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
15d40 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
15d50 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
15d60 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
15d70 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
15d80 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
15d90 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
15da0 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
15db0 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
15dc0 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
15dd0 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
15de0 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
15df0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
15e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15e10 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
15e20 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
15e30 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
15e40 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
15e50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
15e60 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
15e70 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
15e80 61 6d 65 73 20 2a 2f 0a 20 20 75 38 20 6e 63 46  ames */.  u8 ncF
15e90 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
15ea0 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
15eb0 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
15ec0 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
15ed0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
15ee0 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
15ef0 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
15f00 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
15f10 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
15f20 30 78 30 31 20 20 20 20 2f 2a 20 41 67 67 72 65  0x01    /* Aggre
15f30 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
15f40 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
15f50 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
15f60 73 41 67 67 20 20 20 20 30 78 30 32 20 20 20 20  sAgg    0x02    
15f70 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
15f80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
15f90 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
15fa0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
15fb0 30 78 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0x04    /* True 
15fc0 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
15fd0 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
15fe0 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15ff0 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
16000 20 30 78 30 38 20 20 20 20 2f 2a 20 54 72 75 65   0x08    /* True
16010 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
16020 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
16030 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
16040 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
16050 78 31 30 20 20 20 20 2f 2a 20 54 72 75 65 20 69  x10    /* True i
16060 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
16070 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
16080 45 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  E */../*.** An i
16090 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
160a0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
160b0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
160c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
160d0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
160e0 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
160f0 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
16100 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
16110 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
16120 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
16130 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
16140 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
16150 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
16160 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
16170 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
16180 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
16190 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
161a0 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
161b0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
161c0 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
161d0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
161e0 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
161f0 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
16200 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
16210 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
16220 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
16230 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
16240 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
16250 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
16260 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
16270 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
16280 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
16290 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
162a0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
162b0 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
162c0 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
162d0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
162e0 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
162f0 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
16300 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
16310 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
16320 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
16330 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
16340 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
16350 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
16360 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
16370 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
16380 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
16390 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
163a0 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
163b0 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
163c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
163d0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
163e0 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
163f0 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
16400 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
16410 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
16420 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
16430 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
16440 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
16450 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
16460 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
16470 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
16480 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
16490 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
164a0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
164b0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
164c0 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
164d0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
164e0 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
164f0 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
16500 20 20 54 61 62 6c 65 20 2a 70 52 65 63 75 72 73    Table *pRecurs
16510 65 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  e;       /* Non-
16520 4e 55 4c 4c 20 66 6f 72 20 74 68 65 20 72 65 63  NULL for the rec
16530 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 72  ursive part of r
16540 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
16550 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
16560 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
16570 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
16580 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
16590 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
165a0 75 31 36 20 73 65 6c 46 6c 61 67 73 3b 20 20 20  u16 selFlags;   
165b0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
165c0 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  s SF_* values */
165d0 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69  .  int iLimit, i
165e0 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d  Offset;   /* Mem
165f0 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f  ory registers ho
16600 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46  lding LIMIT & OF
16610 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  FSET counters */
16620 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
16630 70 68 6d 5b 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[3];   /* OP_
16640 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
16650 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
16660 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 75 36  s select */.  u6
16670 34 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  4 nSelectRow;   
16680 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
16690 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
166a0 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 53 72 63  lt rows */.  Src
166b0 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
166c0 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
166d0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
166e0 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
166f0 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
16700 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
16710 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
16720 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
16730 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
16740 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
16750 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
16760 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
16770 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
16780 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
16790 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
167a0 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
167b0 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
167c0 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
167d0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
167e0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
167f0 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
16800 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
16810 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
16820 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
16830 0a 20 20 53 65 6c 65 63 74 20 2a 70 52 69 67 68  .  Select *pRigh
16840 74 6d 6f 73 74 3b 20 20 20 20 2f 2a 20 52 69 67  tmost;    /* Rig
16850 68 74 2d 6d 6f 73 74 20 73 65 6c 65 63 74 20 69  ht-most select i
16860 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
16870 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
16880 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
16890 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
168a0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
168b0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
168c0 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ed. */.  Expr *p
168d0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20  Offset;         
168e0 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  /* OFFSET expres
168f0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
16900 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
16910 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
16920 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
16930 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
16940 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
16950 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r NULL. */.};../
16960 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
16970 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
16980 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
16990 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
169a0 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
169b0 46 6c 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e  Flag"..*/.#defin
169c0 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
169d0 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20       0x0001  /* 
169e0 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
169f0 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
16a00 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64  fine SF_Resolved
16a10 20 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20          0x0002  
16a20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68  /* Identifiers h
16a30 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
16a40 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
16a50 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20 20  Aggregate       
16a60 30 78 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61  0x0004  /* Conta
16a70 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
16a80 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
16a90 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
16aa0 72 61 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a  ral   0x0008  /*
16ab0 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
16ac0 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
16ad0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
16ae0 61 6e 64 65 64 20 20 20 20 20 20 20 20 30 78 30  anded        0x0
16af0 30 31 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  010  /* sqlite3S
16b00 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
16b10 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
16b20 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
16b30 70 65 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32  peInfo     0x002
16b40 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
16b50 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
16b60 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
16b70 66 69 6e 65 20 53 46 5f 55 73 65 53 6f 72 74 65  fine SF_UseSorte
16b80 72 20 20 20 20 20 20 20 30 78 30 30 34 30 20 20  r       0x0040  
16b90 2f 2a 20 53 6f 72 74 20 75 73 69 6e 67 20 61 20  /* Sort using a 
16ba0 73 6f 72 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e  sorter */.#defin
16bb0 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20  e SF_Values     
16bc0 20 20 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20       0x0080  /* 
16bd0 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d  Synthesized from
16be0 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a   VALUES clause *
16bf0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 74  /.#define SF_Mat
16c00 65 72 69 61 6c 69 7a 65 20 20 20 20 20 30 78 30  erialize     0x0
16c10 31 30 30 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61  100  /* Force ma
16c20 74 65 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  terialization of
16c30 20 76 69 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e   views */.#defin
16c40 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
16c50 20 20 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20       0x0200  /* 
16c60 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
16c70 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
16c80 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
16c90 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
16ca0 20 20 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65    0x0400  /* Nee
16cb0 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
16cc0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
16cd0 79 28 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  y() */.../*.** T
16ce0 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
16cf0 73 65 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69  select can be di
16d00 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
16d10 65 72 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a  eral ways.  The.
16d20 2a 2a 20 22 53 52 54 22 20 70 72 65 66 69 78 20  ** "SRT" prefix 
16d30 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
16d40 73 75 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23  sult Type"..*/.#
16d50 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e  define SRT_Union
16d60 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74          1  /* St
16d70 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65  ore result as ke
16d80 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
16d90 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
16da0 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a  cept       2  /*
16db0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66   Remove result f
16dc0 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65  rom a UNION inde
16dd0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
16de0 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33 20  _Exists       3 
16df0 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74   /* Store 1 if t
16e00 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74  he result is not
16e10 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
16e20 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20  e SRT_Discard   
16e30 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20     4  /* Do not 
16e40 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 73  save the results
16e50 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a   anywhere */../*
16e60 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
16e70 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20  ause is ignored 
16e80 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61  for all of the a
16e90 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  bove */.#define 
16ea0 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79  IgnorableOrderby
16eb0 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c  (X) ((X->eDest)<
16ec0 3d 53 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23  =SRT_Discard)..#
16ed0 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
16ee0 74 20 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75  t       5  /* Ou
16ef0 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
16f00 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
16f10 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
16f20 20 20 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20      6  /* Store 
16f30 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
16f40 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
16f50 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
16f60 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
16f70 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
16f80 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
16f90 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65  define SRT_Table
16fa0 20 20 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74          8  /* St
16fb0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
16fc0 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
16fd0 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
16fe0 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54  efine SRT_EphemT
16ff0 61 62 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65  ab     9  /* Cre
17000 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61  ate transient ta
17010 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65  b and store like
17020 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64   SRT_Table */.#d
17030 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74  efine SRT_Corout
17040 69 6e 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e  ine   10  /* Gen
17050 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72  erate a single r
17060 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
17070 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
17080 54 61 62 6c 65 20 20 20 31 31 20 20 2f 2a 20 4c  Table   11  /* L
17090 69 6b 65 20 53 52 54 5f 54 41 42 4c 45 2c 20 62  ike SRT_TABLE, b
170a0 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
170b0 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  s only */../*.**
170c0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
170d0 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
170e0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
170f0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
17100 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
17110 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
17120 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
17130 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
17140 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
17150 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
17160 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
17170 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
17180 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
17190 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
171a0 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
171b0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
171c0 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
171d0 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
171e0 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
171f0 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
17200 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
17210 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
17220 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
17230 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
17240 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
17250 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  t;        /* Num
17260 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
17270 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b   allocated */.};
17280 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
17290 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
172a0 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
172b0 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
172c0 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
172d0 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
172e0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
172f0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
17300 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
17310 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
17320 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
17330 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
17340 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
17350 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
17360 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
17370 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
17380 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
17390 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
173a0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
173b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
173c0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
173d0 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
173e0 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
173f0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
17400 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
17410 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
17420 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
17430 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
17440 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
17450 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
17460 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
17470 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
17480 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
17490 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
174a0 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
174b0 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
174c0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
174d0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
174e0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
174f0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
17500 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
17510 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
17520 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
17530 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
17540 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
17550 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
17560 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
17570 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
17580 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
17590 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
175a0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
175b0 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
175c0 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
175d0 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
175e0 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
175f0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
17600 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
17610 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
17620 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
17630 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
17640 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
17650 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
17660 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
17670 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
17680 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
17690 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
176a0 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
176b0 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
176c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
176d0 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
176e0 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
176f0 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
17700 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
17710 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
17720 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
17730 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
17740 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
17750 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
17760 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
17770 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
17780 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
17790 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
177a0 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
177b0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
177c0 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
177d0 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
177e0 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
177f0 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
17800 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
17810 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
17820 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
17830 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
17840 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
17850 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
17860 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
17870 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
17880 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
17890 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
178a0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
178b0 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
178c0 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
178d0 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
178e0 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
178f0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
17900 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
17910 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
17920 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
17930 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
17940 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
17950 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
17960 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
17970 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
17980 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
17990 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
179a0 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
179b0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
179c0 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
179d0 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
179e0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
179f0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
17a00 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
17a10 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
17a20 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
17a30 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
17a40 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
17a50 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
17a60 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
17a70 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
17a80 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
17a90 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
17aa0 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
17ab0 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
17ac0 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
17ad0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
17ae0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
17af0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
17b00 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
17b10 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
17b20 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
17b30 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
17b40 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
17b50 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74  .  typedef sqlit
17b60 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73  e3_uint64 yDbMas
17b70 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
17b80 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
17b90 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  yDbMask;.#endif.
17ba0 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
17bb0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
17bc0 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
17bd0 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
17be0 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
17bf0 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
17c00 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
17c10 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
17c20 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
17c30 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
17c40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
17c50 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
17c60 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
17c70 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
17c80 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
17c90 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
17ca0 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
17cb0 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
17cc0 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
17cd0 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
17ce0 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
17cf0 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
17d00 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
17d10 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
17d20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
17d30 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
17d40 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
17d50 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
17d60 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
17d70 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
17d80 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
17d90 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
17da0 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
17db0 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
17dc0 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
17dd0 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
17de0 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
17df0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
17e00 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
17e10 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
17e20 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
17e30 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
17e40 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
17e50 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
17e60 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
17e70 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
17e80 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
17e90 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
17ea0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
17eb0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
17ec0 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
17ed0 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
17ee0 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
17ef0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
17f00 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
17f10 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
17f20 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
17f30 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
17f40 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
17f50 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
17f60 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
17f70 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
17f80 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
17f90 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
17fa0 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
17fb0 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
17fc0 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
17fd0 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
17fe0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
17ff0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
18000 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
18010 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
18020 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
18030 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18040 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
18050 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
18060 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
18070 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
18080 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18090 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
180a0 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
180b0 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
180c0 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
180d0 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
180e0 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
180f0 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
18100 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
18110 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18120 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
18130 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75  olCache[] */.  u
18140 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
18150 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
18160 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  y in aColCache[]
18170 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20   to replace */. 
18180 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
18190 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
181a0 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
181b0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
181c0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
181d0 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
181e0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
181f0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
18200 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
18210 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
18220 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
18230 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
18240 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
18250 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
18260 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ry() */.  int aT
18270 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
18280 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
18290 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
182a0 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
182b0 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
182c0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
182d0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
182e0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
182f0 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
18300 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
18310 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
18320 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
18330 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
18340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
18350 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
18360 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
18370 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
18380 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
18390 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
183a0 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
183b0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
183c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
183d0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
183e0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
183f0 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
18400 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18410 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
18420 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
18430 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
18440 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
18450 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
18460 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
18470 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
18480 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
18490 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
184a0 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
184b0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
184c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
184d0 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
184e0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
184f0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
18500 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
18510 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 69 6e 74 20  labels */.  int 
18520 69 46 69 78 65 64 4f 70 3b 20 20 20 20 20 20 20  iFixedOp;       
18530 20 2f 2a 20 4e 65 76 65 72 20 62 61 63 6b 20 6f   /* Never back o
18540 75 74 20 6f 70 63 6f 64 65 73 20 69 46 69 78 65  ut opcodes iFixe
18550 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c 69 65 72  dOp-1 or earlier
18560 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
18570 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
18580 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
18590 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
185a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
185b0 20 20 69 6e 74 20 69 50 61 72 74 49 64 78 54 61    int iPartIdxTa
185c0 62 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  b;     /* Table 
185d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
185e0 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
185f0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
18600 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  Level;     /* Co
18610 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65  lCache valid whe
18620 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c  n aColCache[].iL
18630 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65  evel<=iCacheLeve
18640 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  l */.  int iCach
18650 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43  eCnt;       /* C
18660 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67  ounter used to g
18670 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68  enerate aColCach
18680 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a  e[].lru values *
18690 2f 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  /.  struct yColC
186a0 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
186b0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
186c0 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
186d0 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
186e0 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt iColumn;     
186f0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
18700 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
18710 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
18720 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
18730 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
18740 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
18750 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
18760 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
18770 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
18780 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
18790 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
187a0 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
187b0 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
187c0 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
187d0 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
187e0 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
187f0 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
18800 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
18810 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
18820 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
18830 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
18840 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
18850 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
18860 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
18870 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
18880 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e  ConstExpr;/* Con
18890 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
188a0 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  s */.  yDbMask w
188b0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
188c0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
188d0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
188e0 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
188f0 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
18900 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
18910 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
18920 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
18930 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 47 6f 74  .  int cookieGot
18940 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  o;      /* Addre
18950 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f 20 74 6f  ss of OP_Goto to
18960 20 63 6f 6f 6b 69 65 20 76 65 72 69 66 69 65 72   cookie verifier
18970 20 73 75 62 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   subroutine */. 
18980 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75 65   int cookieValue
18990 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  [SQLITE_MAX_ATTA
189a0 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61 6c  CHED+2];  /* Val
189b0 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20 74  ues of cookies t
189c0 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69 6e  o verify */.  in
189d0 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20  t regRowid;     
189e0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
189f0 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20  olding rowid of 
18a00 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74  CREATE TABLE ent
18a10 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  ry */.  int regR
18a20 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  oot;         /* 
18a30 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
18a40 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
18a50 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74  r for new object
18a60 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41  s */.  int nMaxA
18a70 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  rg;         /* M
18a80 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74  ax args passed t
18a90 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  o user function 
18aa0 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a  by sub-program *
18ab0 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72  /.  Token constr
18ac0 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65  aintName;/* Name
18ad0 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69   of the constrai
18ae0 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  nt currently bei
18af0 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 23 69 66  ng parsed */.#if
18b00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
18b10 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
18b20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
18b30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18b40 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
18b50 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
18b60 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
18b70 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
18b80 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
18b90 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
18ba0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
18bb0 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
18bc0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
18bd0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
18be0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
18bf0 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  /..  /* Informat
18c00 69 6f 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63  ion used while c
18c10 6f 64 69 6e 67 20 74 72 69 67 67 65 72 20 70 72  oding trigger pr
18c20 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72  ograms. */.  Par
18c30 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20  se *pToplevel;  
18c40 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63    /* Parse struc
18c50 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72  ture for main pr
18c60 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20  ogram (or NULL) 
18c70 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69  */.  Table *pTri
18c80 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62  ggerTab;  /* Tab
18c90 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20  le triggers are 
18ca0 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20  being coded for 
18cb0 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54  */.  int addrCrT
18cc0 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64  ab;       /* Add
18cd0 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
18ce0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e  eTable opcode on
18cf0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
18d00 0a 20 20 69 6e 74 20 61 64 64 72 53 6b 69 70 50  .  int addrSkipP
18d10 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  K;      /* Addre
18d20 73 73 20 6f 66 20 69 6e 73 74 72 75 63 74 69 6f  ss of instructio
18d30 6e 20 74 6f 20 73 6b 69 70 20 50 52 49 4d 41 52  n to skip PRIMAR
18d40 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 20  Y KEY index */. 
18d50 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
18d60 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
18d70 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
18d80 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
18d90 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
18da0 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
18db0 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
18dc0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
18dd0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
18de0 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
18df0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
18e00 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
18e10 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
18e20 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
18e30 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
18e40 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
18e50 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
18e60 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
18e70 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
18e80 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
18e90 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
18ea0 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
18eb0 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
18ec0 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
18ed0 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62  gers */..  /* Ab
18ee0 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  ove is constant 
18ef0 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f  between recursio
18f00 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65  ns.  Below is re
18f10 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61  set before and a
18f20 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72  fter.  ** each r
18f30 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69  ecursion */..  i
18f40 6e 74 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  nt nVar;        
18f50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18f60 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
18f70 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
18f80 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
18f90 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20 20 20 20  int nzVar;      
18fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
18fb0 62 65 72 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  ber of available
18fc0 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b   slots in azVar[
18fd0 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72  ] */.  u8 iPkSor
18fe0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
18ff0 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20   /* ASC or DESC 
19000 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d  for INTEGER PRIM
19010 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20  ARY KEY */.  u8 
19020 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20  explain;        
19030 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
19040 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c  f the EXPLAIN fl
19050 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74  ag is found on t
19060 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e  he query */.#ifn
19070 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
19080 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75  VIRTUALTABLE.  u
19090 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20  8 declareVtab;  
190a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
190b0 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74   if inside sqlit
190c0 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
190d0 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62  ) */.  int nVtab
190e0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
190f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
19100 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20  rtual tables to 
19110 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lock */.#endif. 
19120 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20 20 20 20   int nAlias;    
19130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
19140 6d 62 65 72 20 6f 66 20 61 6c 69 61 73 65 64 20  mber of aliased 
19150 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
19160 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69  ns */.  int nHei
19170 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
19180 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
19190 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
191a0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
191b0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
191c0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
191d0 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
191e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
191f0 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
19200 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
19210 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
19220 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
19230 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
19240 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
19250 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
19260 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
19270 20 20 63 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20    char **azVar; 
19280 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
19290 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61 6d 65 73  ointers to names
192a0 20 6f 66 20 70 61 72 61 6d 65 74 65 72 73 20 2a   of parameters *
192b0 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
192c0 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
192d0 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
192e0 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
192f0 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
19300 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
19310 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
19320 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
19330 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
19340 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
19350 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
19360 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
19370 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
19380 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
19390 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
193a0 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
193b0 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
193c0 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
193d0 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
193e0 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
193f0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
19400 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
19410 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
19420 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
19430 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
19440 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
19450 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c  oken with unqual
19460 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a  ified schema obj
19470 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ect name */.  To
19480 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
19490 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c          /* The l
194a0 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64  ast token parsed
194b0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
194c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
194d0 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72  ABLE.  Token sAr
194e0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
194f0 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78   /* Complete tex
19500 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72  t of a module ar
19510 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c  gument */.  Tabl
19520 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20  e **apVtabLock; 
19530 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
19540 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c   to virtual tabl
19550 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69  es needing locki
19560 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54  ng */.#endif.  T
19570 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62  able *pZombieTab
19580 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  ;        /* List
19590 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74   of Table object
195a0 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65  s to delete afte
195b0 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20  r code gen */.  
195c0 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72 69  TriggerPrg *pTri
195d0 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e  ggerPrg;  /* Lin
195e0 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65  ked list of code
195f0 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20  d triggers */.  
19600 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
19610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
19620 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65  rent WITH clause
19630 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
19640 74 72 75 63 74 20 43 74 65 20 2a 70 43 74 65 3b  truct Cte *pCte;
19650 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
19660 65 6e 74 20 43 54 45 2c 20 6f 72 20 4e 55 4c 4c  ent CTE, or NULL
19670 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65   */.};../*.** Re
19680 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72  turn true if cur
19690 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e  rently inside an
196a0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
196b0 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f  _vtab() call..*/
196c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
196d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
196e0 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
196f0 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c  CLARE_VTAB 0.#el
19700 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  se.  #define IN_
19710 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50  DECLARE_VTAB (pP
19720 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61  arse->declareVta
19730 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  b).#endif../*.**
19740 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19750 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19760 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64  ructure can be d
19770 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61  eclared on a sta
19780 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ck and used.** t
19790 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65  o save the Parse
197a0 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61  .zAuthContext va
197b0 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63  lue so that it c
197c0 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c  an be restored l
197d0 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ater..*/.struct 
197e0 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20  AuthContext {.  
197f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74  const char *zAut
19800 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50  hContext;   /* P
19810 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a  ut saved Parse.z
19820 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65  AuthContext here
19830 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61   */.  Parse *pPa
19840 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
19850 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73    /* The Parse s
19860 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a  tructure */.};..
19870 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66  /*.** Bitfield f
19880 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75  lags for P5 valu
19890 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63  e in various opc
198a0 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  odes..*/.#define
198b0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
198c0 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
198d0 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64   Set to update d
198e0 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64  b->nChange */.#d
198f0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53  efine OPFLAG_LAS
19900 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32 20  TROWID     0x02 
19910 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64     /* Set to upd
19920 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ate db->lastRowi
19930 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  d */.#define OPF
19940 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20  LAG_ISUPDATE    
19950 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69    0x04    /* Thi
19960 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61  s OP_Insert is a
19970 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a  n sql UPDATE */.
19980 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
19990 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30  PPEND        0x0
199a0 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  8    /* This is 
199b0 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20  likely to be an 
199c0 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  append */.#defin
199d0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
199e0 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f  RESULT 0x10    /
199f0 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61  * Try to avoid a
19a00 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e   seek in BtreeIn
19a10 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e  sert() */.#defin
19a20 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
19a30 43 48 45 20 20 20 20 30 78 32 30 20 20 20 20 2f  CHE    0x20    /
19a40 2a 20 43 6c 65 61 72 20 70 73 65 75 64 6f 2d 74  * Clear pseudo-t
19a50 61 62 6c 65 20 63 61 63 68 65 20 69 6e 20 4f 50  able cache in OP
19a60 5f 43 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69  _Column */.#defi
19a70 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
19a80 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
19a90 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
19aa0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
19ab0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
19ac0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
19ad0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
19ae0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
19af0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
19b00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
19b10 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
19b20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
19b30 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
19b40 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
19b50 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19b60 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
19b70 30 32 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  02    /* P2 to O
19b80 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
19b90 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
19ba0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
19bb0 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
19bc0 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
19bd0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
19be0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a  mutation */../*.
19bf0 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20   * Each trigger 
19c00 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
19c10 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
19c20 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69  s stored as an i
19c30 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74  nstance of. * st
19c40 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 0a 20  ruct Trigger. . 
19c50 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
19c60 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
19c70 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
19c80 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
19c90 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
19ca0 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
19cb0 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
19cc0 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
19cd0 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
19ce0 65 20 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  e . *    databas
19cf0 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
19d00 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
19d10 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
19d20 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
19d30 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
19d40 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
19d50 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
19d60 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
19d70 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
19d80 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
19d90 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
19da0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
19db0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
19dc0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
19dd0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
19de0 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
19df0 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
19e00 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
19e10 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
19e20 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
19e30 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
19e40 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
19e50 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
19e60 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
19e70 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
19e80 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
19e90 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
19ea0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
19eb0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
19ec0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
19ed0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
19ee0 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
19ef0 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
19f20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19f30 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
19f40 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
19f50 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
19f60 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19f80 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
19f90 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
19fa0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
19fb0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
19fd0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
19fe0 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
19ff0 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
1a000 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
1a010 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
1a020 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
1a030 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
1a040 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
1a050 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
1a060 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
1a070 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
1a080 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
1a090 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
1a0c0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
1a0d0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
1a0e0 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
1a0f0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
1a100 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
1a110 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
1a120 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
1a130 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
1a140 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1a150 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
1a160 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
1a170 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
1a180 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
1a190 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
1a1a0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
1a1b0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
1a1c0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
1a1d0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
1a1e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
1a1f0 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
1a200 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
1a210 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
1a220 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
1a230 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
1a240 72 6d 69 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a  rmine which. .**
1a250 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
1a260 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
1a270 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
1a280 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
1a290 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
1a2a0 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
1a2b0 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
1a2c0 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
1a2d0 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
1a2e0 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
1a2f0 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
1a300 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
1a310 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
1a320 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
1a330 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
1a340 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
1a350 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
1a360 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
1a370 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
1a380 70 72 6f 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20  program. . *. * 
1a390 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
1a3a0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
1a3b0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
1a3c0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
1a3d0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
1a3e0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
1a3f0 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
1a400 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
1a410 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
1a420 74 68 65 20 0a 20 2a 20 61 73 73 6f 63 69 61 74  the . * associat
1a430 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ed struct Trigge
1a440 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20  r instance. The 
1a450 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
1a460 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1a470 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74   is. * the first
1a480 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69   step of the tri
1a490 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a  gger-program.. *
1a4a0 20 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65   . * The "op" me
1a4b0 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
1a4c0 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1a4d0 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
1a4e0 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
1a4f0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
1a500 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
1a510 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
1a520 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
1a530 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 0a  ermined by the .
1a540 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
1a550 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
1a560 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
1a570 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
1a580 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
1a590 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
1a5a0 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
1a5b0 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
1a5c0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
1a5d0 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
1a5e0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
1a5f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
1a600 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
1a610 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
1a620 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
1a630 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1a640 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20   target    -> A 
1a650 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68  token holding th
1a660 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  e quoted name of
1a670 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
1a680 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
1a690 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
1a6a0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
1a6b0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
1a6c0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
1a6d0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
1a6e0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
1a6f0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
1a700 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
1a710 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
1a720 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
1a730 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1a740 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
1a750 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
1a760 20 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20   . *            
1a770 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
1a780 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
1a790 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
1a7a0 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
1a7b0 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
1a7c0 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
1a7d0 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74   TK_DELETE). * t
1a7e0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1a7f0 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1a800 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1a810 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
1a820 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
1a830 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1a840 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1a850 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
1a860 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1a870 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1a880 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1a890 20 4e 55 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f   NULL.. * . * (o
1a8a0 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a  p == TK_UPDATE).
1a8b0 20 2a 20 74 61 72 67 65 74 20 20 20 20 2d 3e 20   * target    -> 
1a8c0 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20  A token holding 
1a8d0 74 68 65 20 71 75 6f 74 65 64 20 6e 61 6d 65 20  the quoted name 
1a8e0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
1a8f0 75 70 64 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a  update rows of..
1a900 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
1a910 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1a920 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
1a930 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
1a940 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
1a960 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
1a970 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
1a980 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
1a990 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
1a9a0 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
1a9b0 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
1a9d0 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
1a9e0 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
1a9f0 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
1aa00 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
1aa10 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
1aa20 2a 20 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72  * . */.struct Tr
1aa30 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38  iggerStep {.  u8
1aa40 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1aa50 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f     /* One of TK_
1aa60 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54  DELETE, TK_UPDAT
1aa70 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b  E, TK_INSERT, TK
1aa80 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20  _SELECT */.  u8 
1aa90 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1aaa0 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b    /* OE_Rollback
1aab0 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67   etc. */.  Trigg
1aac0 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20  er *pTrig;      
1aad0 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74  /* The trigger t
1aae0 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73  hat this step is
1aaf0 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20   a part of */.  
1ab00 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1ab10 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73       /* SELECT s
1ab20 74 61 74 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  tatment or RHS o
1ab30 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  f INSERT INTO ..
1ab40 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
1ab50 20 54 6f 6b 65 6e 20 74 61 72 67 65 74 3b 20 20   Token target;  
1ab60 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
1ab70 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
1ab80 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
1ab90 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1aba0 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
1abb0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
1abc0 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
1abd0 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
1abe0 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
1abf0 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
1ac00 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
1ac10 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
1ac20 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
1ac30 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
1ac40 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
1ac50 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
1ac60 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
1ac70 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
1ac80 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
1ac90 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
1aca0 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
1acb0 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
1acc0 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
1acd0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1ace0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1acf0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
1ad00 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
1ad10 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
1ad20 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
1ad30 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
1ad40 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
1ad50 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
1ad60 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a 74  explicit.  .*/.t
1ad70 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
1ad80 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
1ad90 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
1ada0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1adb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1adc0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
1add0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
1ade0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
1adf0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1ae00 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
1ae10 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
1ae20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
1ae30 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
1ae40 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
1ae50 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
1ae60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1ae70 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
1ae80 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
1ae90 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
1aea0 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
1aeb0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1aec0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
1aed0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
1aee0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
1aef0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
1af00 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
1af10 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
1af20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1af30 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1af40 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
1af50 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
1af60 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
1af70 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
1af80 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
1af90 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
1afa0 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
1afb0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
1afc0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
1afd0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
1afe0 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
1aff0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1b000 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
1b010 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
1b020 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
1b030 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
1b040 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1b050 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
1b060 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
1b070 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
1b080 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1b090 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
1b0a0 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
1b0b0 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20 20   int  nChar;    
1b0c0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
1b0d0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
1b0e0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e   far */.  int  n
1b0f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
1b100 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
1b110 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
1b120 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20 6d  Text */.  int  m
1b130 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
1b140 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
1b150 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  d string length 
1b160 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61 6c  */.  u8   useMal
1b170 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a 20  loc;      /* 0: 
1b180 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74 65  none,  1: sqlite
1b190 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20 73  3DbMalloc,  2: s
1b1a0 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f  qlite3_malloc */
1b1b0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
1b1c0 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
1b1d0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
1b1e0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
1b1f0 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
1b200 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
1b210 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
1b220 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20  OOBIG  2../*.** 
1b230 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
1b240 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
1b250 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
1b260 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
1b270 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
1b280 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
1b290 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
1b2a0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1b2b0 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
1b2c0 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
1b2d0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
1b2e0 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
1b2f0 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
1b300 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
1b310 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
1b320 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
1b330 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
1b340 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
1b350 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
1b360 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
1b370 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
1b380 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
1b390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1b3a0 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
1b3b0 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
1b3c0 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
1b3d0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1b3e0 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
1b3f0 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
1b400 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
1b410 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
1b420 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
1b430 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
1b440 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
1b450 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
1b460 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
1b470 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b490 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
1b4a0 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
1b4b0 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
1b4c0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1b4d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1b4e0 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
1b4f0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
1b500 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b520 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
1b530 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
1b540 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
1b570 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
1b580 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
1b590 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
1b5c0 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
1b5d0 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
1b5e0 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
1b610 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
1b620 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
1b650 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
1b660 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
1b670 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
1b680 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1b690 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1b6a0 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
1b6b0 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1b6e0 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
1b6f0 6e 74 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  nt */.  sqlite3_
1b700 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
1b710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
1b720 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
1b730 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
1b740 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1b750 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
1b760 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
1b770 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
1b780 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
1b790 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
1b7a0 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
1b7b0 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
1b7c0 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
1b7d0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
1b7e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b7f0 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
1b800 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
1b810 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
1b840 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
1b850 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b870 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
1b880 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
1b890 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
1b8a0 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
1b8b0 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
1b8c0 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
1b8d0 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
1b8e0 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b900 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
1b910 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
1b920 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
1b950 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
1b960 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1b970 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b980 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
1b990 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
1b9a0 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b9c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
1b9d0 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
1b9e0 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
1ba10 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
1ba20 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ba40 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
1ba50 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
1ba60 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ba90 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
1baa0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
1bab0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
1bac0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
1bad0 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
1bae0 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
1baf0 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
1bb00 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
1bb10 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
1bb20 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
1bb30 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
1bb40 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
1bb50 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
1bb60 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
1bb70 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
1bb80 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
1bb90 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
1bba0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
1bbb0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
1bbe0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
1bbf0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
1bc00 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
1bc10 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
1bc20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
1bc30 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
1bc40 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
1bc50 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
1bc60 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
1bc70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1bc80 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
1bc90 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1bca0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
1bcb0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1bcc0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1bcd0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
1bce0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
1bcf0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd10 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
1bd20 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
1bd30 65 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ed */.  sqlite3_
1bd40 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
1bd50 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
1bd60 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
1bd70 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
1bd80 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69  */.  int nRefIni
1bd90 74 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  tMutex;         
1bda0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bdb0 20 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e   of users of pIn
1bdc0 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69  itMutex */.  voi
1bdd0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
1bde0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
1bdf0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
1be00 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
1be10 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be30 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
1be40 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
1be50 2a 2f 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  */.  int bLocalt
1be60 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
1be70 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1be80 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
1be90 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64  () calls */.#ifd
1bea0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1beb0 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
1bec0 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
1bed0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1bee0 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
1bef0 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
1bf00 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
1bf10 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
1bf20 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
1bf30 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
1bf40 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
1bf50 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
1bf60 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
1bf70 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
1bf80 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
1bf90 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
1bfa0 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
1bfb0 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
1bfc0 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
1bfd0 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
1bfe0 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
1bff0 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
1c000 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
1c010 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
1c020 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
1c030 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
1c040 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
1c050 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
1c060 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
1c070 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
1c080 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
1c090 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
1c0a0 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
1c0b0 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
1c0c0 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
1c0d0 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
1c0e0 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
1c0f0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
1c100 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
1c110 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
1c120 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
1c130 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
1c140 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
1c150 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
1c160 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
1c170 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
1c180 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
1c190 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
1c1a0 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
1c1b0 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
1c1c0 6b 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45  ker {.  int (*xE
1c1d0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
1c1e0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
1c1f0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
1c200 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
1c210 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
1c220 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
1c230 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
1c240 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
1c250 45 43 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20  ECTs */.  Parse 
1c260 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f      /* Parser co
1c290 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74  ntext.  */.  int
1c2a0 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20   walkerDepth;   
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1c2d0 20 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a   of subqueries *
1c2e0 2f 0a 20 20 75 38 20 62 53 65 6c 65 63 74 44 65  /.  u8 bSelectDe
1c2f0 70 74 68 46 69 72 73 74 3b 20 20 20 20 20 20 20  pthFirst;       
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c310 20 44 6f 20 73 75 62 71 75 65 72 69 65 73 20 66   Do subqueries f
1c320 69 72 73 74 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  irst */.  union 
1c330 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c350 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
1c360 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
1c370 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
1c380 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
1c3b0 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  xt */.    int i;
1c3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
1c3f0 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63  value */.    Src
1c400 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
1c430 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
1c440 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
1c450 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
1c460 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
1c470 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
1c480 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b  rences */.  } u;
1c490 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
1c4a0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
1c4b0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
1c4c0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
1c4d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1c4e0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
1c4f0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
1c500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1c510 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
1c520 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
1c530 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
1c540 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
1c550 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
1c560 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
1c570 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
1c580 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  t*);../*.** Retu
1c590 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
1c5a0 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
1c5b0 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
1c5c0 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
1c5d0 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
1c5e0 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
1c5f0 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
1c600 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
1c610 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
1c620 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
1c630 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
1c640 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
1c650 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
1c660 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
1c670 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
1c680 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
1c690 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
1c6a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c6b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1c6c0 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
1c6d0 73 65 74 20 6f 66 20 43 54 45 73 20 28 63 6f 6d  set of CTEs (com
1c6e0 6d 6f 6e 20 74 61 62 6c 65 20 0a 2a 2a 20 65 78  mon table .** ex
1c6f0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
1c700 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
1c710 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
1c720 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
1c730 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c750 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
1c760 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
1c770 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
1c780 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
1c790 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
1c7a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
1c7b0 72 75 63 74 20 43 74 65 20 7b 0a 20 20 20 20 63  ruct Cte {.    c
1c7c0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c7e0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
1c7f0 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
1c800 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
1c810 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1c820 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
1c830 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
1c840 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
1c850 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1c860 20 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 74       /* The cont
1c870 65 6e 74 73 20 6f 66 20 74 68 65 20 43 54 45 20  ents of the CTE 
1c880 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 74  */.    struct Ct
1c890 65 20 2a 70 4f 75 74 65 72 43 74 65 3b 0a 20 20  e *pOuterCte;.  
1c8a0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
1c8b0 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a   } a[1];.};../*.
1c8c0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
1c8d0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1c8e0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
1c8f0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
1c900 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
1c910 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
1c920 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
1c930 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
1c940 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
1c950 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
1c960 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c980 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
1c990 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
1c9c0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
1c9d0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
1c9e0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
1c9f0 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
1ca30 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
1ca40 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
1ca50 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
1ca60 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
1ca70 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
1ca80 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
1ca90 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
1caa0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
1cab0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
1cac0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
1cad0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
1cae0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
1caf0 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
1cb00 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
1cb10 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
1cb20 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
1cb30 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
1cb40 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
1cb50 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
1cb60 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
1cb70 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1cb80 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1cb90 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1cba0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1cbb0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1cbc0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
1cbd0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1cbe0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
1cbf0 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1cc00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
1cc10 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
1cc20 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
1cc30 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1cc40 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
1cc50 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
1cc60 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
1cc70 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
1cc80 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
1cc90 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
1cca0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
1ccb0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
1ccc0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1ccd0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
1cce0 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
1ccf0 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74  we also all.** t
1cd00 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
1cd10 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
1cd20 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73  erve as an aliss
1cd30 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  e for SQLITE_ENA
1cd40 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
1cd50 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1cd60 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
1cd70 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1cd80 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
1cd90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
1cda0 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a  BLE_FTS3.#endif.
1cdb0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
1cdc0 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
1cdd0 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
1cde0 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
1cdf0 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
1ce00 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
1ce10 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
1ce20 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
1ce30 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
1ce40 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
1ce50 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
1ce60 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1ce70 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
1ce80 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
1ce90 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
1cea0 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
1ceb0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
1cec0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1ced0 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
1cee0 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
1cef0 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
1cf00 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
1cf10 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
1cf20 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
1cf30 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
1cf40 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
1cf50 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
1cf60 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
1cf70 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
1cf80 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
1cf90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
1cfa0 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
1cfb0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1cfc0 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
1cfd0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1cfe0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
1cff0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1d000 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
1d010 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1d020 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1d030 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
1d040 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
1d050 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
1d060 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1d070 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1d080 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
1d090 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1d0a0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1d0b0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1d0c0 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
1d0d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1d0e0 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
1d0f0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1d100 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1d110 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
1d120 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1d130 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1d140 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1d150 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
1d160 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1d170 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
1d180 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
1d190 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1d1a0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1d1b0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1d1c0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
1d1d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1d1e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d1f0 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
1d200 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
1d210 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1d220 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1d230 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
1d240 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1d250 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1d260 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1d270 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
1d280 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1d290 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
1d2a0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
1d2b0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1d2c0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1d2d0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
1d2e0 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
1d2f0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1d300 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1d310 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
1d320 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
1d330 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a  ar)(x)).#endif..
1d340 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
1d350 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
1d360 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
1d370 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
1d380 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
1d390 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
1d3a0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1d3b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1d3c0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
1d3d0 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
1d3e0 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
1d3f0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1d400 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
1d410 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d420 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1d430 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1d440 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20  Zero(int);.void 
1d450 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1d460 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69  Zero(sqlite3*, i
1d470 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1d480 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
1d490 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
1d4a0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1d4b0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1d4c0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
1d4d0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
1d4e0 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1d4f0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   char*, int);.vo
1d500 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
1d510 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a  oc(void*, int);.
1d520 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1d530 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
1d540 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1d550 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1d560 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
1d570 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1d580 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d590 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
1d5a0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
1d5b0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
1d5c0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
1d5d0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
1d5e0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1d5f0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1d600 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
1d610 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1d620 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
1d630 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
1d640 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
1d650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
1d660 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
1d670 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
1d680 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
1d690 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
1d6a0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
1d6b0 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
1d6c0 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69  id (*)(void));.i
1d6d0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
1d6e0 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
1d6f0 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
1d700 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
1d710 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
1d720 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
1d730 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
1d740 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
1d750 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
1d760 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
1d770 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
1d780 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
1d790 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
1d7a0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
1d7b0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
1d7c0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
1d7d0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
1d7e0 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
1d7f0 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
1d800 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
1d810 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
1d820 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
1d830 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1d840 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
1d850 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1d860 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1d870 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
1d880 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1d890 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1d8a0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
1d8b0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
1d8c0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1d8d0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
1d8e0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1d8f0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1d900 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
1d910 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
1d920 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1d930 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1d940 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
1d950 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
1d960 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d970 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1d980 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1d990 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
1d9a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1d9b0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
1d9c0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1d9d0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1d9e0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
1d9f0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
1da00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1da10 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
1da20 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1da30 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1da40 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
1da50 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
1da60 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
1da70 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
1da80 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1da90 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
1daa0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1dab0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1dac0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1dad0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
1dae0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1daf0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
1db00 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
1db10 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
1db20 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
1db30 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
1db40 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1db50 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75  int sqlite3Statu
1db60 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
1db70 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41  d sqlite3StatusA
1db80 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  dd(int, int);.vo
1db90 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
1dba0 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  Set(int, int);..
1dbb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1dbc0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1dbd0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
1dbe0 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
1dbf0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1dc00 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
1dc10 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1dc20 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1dc30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1dc40 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
1dc50 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
1dc60 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
1dc70 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
1dc80 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
1dc90 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
1dca0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
1dcb0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
1dcc0 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
1dcd0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
1dce0 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
1dcf0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
1dd00 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1dd20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
1dd30 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
1dd40 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
1dd50 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
1dd60 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
1dd70 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66  lues */.};..#def
1dd80 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
1dd90 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 0a  F_INTERNAL 0x01.
1dda0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
1ddb0 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
1ddc0 78 30 32 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  x02.void sqlite3
1ddd0 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
1dde0 6d 2a 2c 20 75 33 32 2c 20 63 6f 6e 73 74 20 63  m*, u32, const c
1ddf0 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
1de00 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
1de10 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 75  ntf(StrAccum*, u
1de20 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  32, const char*,
1de30 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c   ...);.char *sql
1de40 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69  ite3MPrintf(sqli
1de50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1de60 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
1de70 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71  lite3VMPrintf(sq
1de80 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1de90 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68  r*, va_list);.ch
1dea0 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70 65  ar *sqlite3MAppe
1deb0 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68 61  ndf(sqlite3*,cha
1dec0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  r*,const char*,.
1ded0 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64  ..);.#if defined
1dee0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
1def0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1df00 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
1df10 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
1df20 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
1df30 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
1df40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
1df50 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
1df60 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
1df70 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1df80 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74  endif../* Output
1df90 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72 20   formatting for 
1dfa0 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
1dfb0 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64  EXPLAIN */.#if d
1dfc0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
1dfd0 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41 49  ABLE_TREE_EXPLAI
1dfe0 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  N).  void sqlite
1dff0 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56 64  3ExplainBegin(Vd
1e000 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  be*);.  void sql
1e010 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e 74  ite3ExplainPrint
1e020 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  f(Vdbe*, const c
1e030 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f  har*, ...);.  vo
1e040 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1e050 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  nNL(Vdbe*);.  vo
1e060 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1e070 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  nPush(Vdbe*);.  
1e080 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1e090 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20  ainPop(Vdbe*);. 
1e0a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1e0b0 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65 2a  lainFinish(Vdbe*
1e0c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1e0d0 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28 56  3ExplainSelect(V
1e0e0 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  dbe*, Select*);.
1e0f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1e100 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a 2c  plainExpr(Vdbe*,
1e110 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
1e120 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45 78  sqlite3ExplainEx
1e130 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45 78  prList(Vdbe*, Ex
1e140 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73  prList*);.  cons
1e150 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
1e160 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56  dbeExplanation(V
1e170 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  dbe*);.#else.# d
1e180 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1e190 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20 64  lainBegin(X).# d
1e1a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1e1b0 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a  lainSelect(A,B).
1e1c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1e1d0 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42 29  ExplainExpr(A,B)
1e1e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e1f0 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73 74  3ExplainExprList
1e200 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
1e210 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69 6e  qlite3ExplainFin
1e220 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65 20  ish(X).# define 
1e230 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c 61  sqlite3VdbeExpla
1e240 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64  nation(X) 0.#end
1e250 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
1e260 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
1e270 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
1e280 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1e290 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
1e2a0 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
1e2b0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1e2c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71 75  .int sqlite3Dequ
1e2d0 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20  ote(char*);.int 
1e2e0 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
1e2f0 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
1e300 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
1e310 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
1e320 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
1e330 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
1e340 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
1e350 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
1e360 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
1e370 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
1e380 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e390 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
1e3a0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
1e3b0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
1e3c0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
1e3d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1e3e0 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
1e3f0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
1e400 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
1e410 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
1e420 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  se*);.Expr *sqli
1e430 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
1e440 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
1e450 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
1e460 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
1e470 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
1e480 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
1e490 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
1e4a0 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
1e4b0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
1e4c0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
1e4d0 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
1e4e0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
1e4f0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
1e500 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1e510 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
1e520 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
1e530 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1e540 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
1e550 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
1e560 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1e570 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
1e580 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
1e590 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1e5a0 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
1e5b0 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
1e5c0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
1e5d0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
1e5e0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
1e5f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
1e600 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
1e610 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
1e620 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
1e630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1e640 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
1e650 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
1e660 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
1e670 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
1e680 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
1e690 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
1e6a0 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
1e6b0 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
1e6c0 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
1e6d0 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
1e6e0 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
1e6f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1e700 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
1e710 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
1e720 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
1e730 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
1e740 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
1e750 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
1e760 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
1e770 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
1e780 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e790 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
1e7a0 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
1e7b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
1e7c0 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
1e7d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e7e0 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
1e7f0 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
1e800 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1e810 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
1e820 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
1e830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e840 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
1e850 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
1e860 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
1e870 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
1e880 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
1e890 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
1e8a0 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
1e8b0 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
1e8c0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
1e8d0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
1e8e0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1e8f0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e  sqlite3AddColumn
1e900 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
1e910 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
1e920 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20  NotNull(Parse*, 
1e930 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e940 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28  e3AddPrimaryKey(
1e950 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
1e960 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
1e970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1e980 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e  ddCheckConstrain
1e990 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  t(Parse*, Expr*)
1e9a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1e9b0 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72 73  dColumnType(Pars
1e9c0 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  e*,Token*);.void
1e9d0 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
1e9e0 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
1e9f0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1ea00 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
1ea10 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
1ea20 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
1ea30 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
1ea40 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1ea50 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
1ea60 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
1ea70 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
1ea80 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
1ea90 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
1eab0 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
1eac0 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
1ead0 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
1eae0 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
1eaf0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
1eb00 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e  nt sqlite3CodeOn
1eb10 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69  ce(Parse *);..Bi
1eb20 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74  tvec *sqlite3Bit
1eb30 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a  vecCreate(u32);.
1eb40 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
1eb50 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75  cTest(Bitvec*, u
1eb60 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
1eb70 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
1eb80 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
1eb90 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
1eba0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
1ebb0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
1ebc0 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
1ebd0 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
1ebe0 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
1ebf0 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73  (Bitvec*);.int s
1ec00 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
1ec10 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
1ec20 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  );..RowSet *sqli
1ec30 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
1ec40 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
1ec50 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
1ec60 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
1ec70 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
1ec80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
1ec90 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
1eca0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
1ecb0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
1ecc0 77 53 65 74 2a 2c 20 75 38 20 69 42 61 74 63 68  wSet*, u8 iBatch
1ecd0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
1ece0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f  te3RowSetNext(Ro
1ecf0 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76  wSet*, i64*);..v
1ed00 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
1ed10 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b  eView(Parse*,Tok
1ed20 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
1ed30 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e  *,Select*,int,in
1ed40 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
1ed50 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
1ed60 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28  EW) || !defined(
1ed70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1ed80 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20  UALTABLE).  int 
1ed90 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
1eda0 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a  lumnNames(Parse*
1edb0 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
1edc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1edd0 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
1ede0 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66  es(A,B) 0.#endif
1edf0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ..void sqlite3Dr
1ee00 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
1ee10 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
1ee20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ee30 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50  3CodeDropTable(P
1ee40 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
1ee50 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1ee60 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c  qlite3DeleteTabl
1ee70 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
1ee80 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
1ee90 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
1eea0 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71  REMENT.  void sq
1eeb0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
1eec0 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70  ntBegin(Parse *p
1eed0 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73  Parse);.  void s
1eee0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1eef0 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50  entEnd(Parse *pP
1ef00 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  arse);.#else.# d
1ef10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
1ef20 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28  oincrementBegin(
1ef30 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1ef40 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1ef50 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e  End(X).#endif.in
1ef60 74 20 73 71 6c 69 74 65 33 43 6f 64 65 43 6f 72  t sqlite3CodeCor
1ef70 6f 75 74 69 6e 65 28 50 61 72 73 65 2a 2c 20 53  outine(Parse*, S
1ef80 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65  elect*, SelectDe
1ef90 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1efa0 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a 2c  e3Insert(Parse*,
1efb0 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63   SrcList*, Selec
1efc0 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74  t*, IdList*, int
1efd0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1efe0 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73 71  ArrayAllocate(sq
1eff0 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74  lite3*,void*,int
1f000 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c  ,int*,int*);.IdL
1f010 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
1f020 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
1f030 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65  *, IdList*, Toke
1f040 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
1f050 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c 69  IdListIndex(IdLi
1f060 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  st*,const char*)
1f070 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1f080 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67 65  e3SrcListEnlarge
1f090 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1f0a0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
1f0b0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
1f0c0 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73 71  SrcListAppend(sq
1f0d0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
1f0e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
1f0f0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1f100 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
1f110 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c  FromTerm(Parse*,
1f120 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
1f130 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  *, Token*,.     
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a   Token*, Select*
1f170 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a  , Expr*, IdList*
1f180 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1f190 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79 28  rcListIndexedBy(
1f1a0 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
1f1b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e   *, Token *);.in
1f1c0 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
1f1d0 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
1f1e0 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
1f1f0 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
1f200 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
1f210 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
1f220 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1f230 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
1f240 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
1f250 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
1f260 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
1f270 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
1f280 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
1f290 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
1f2a0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
1f2b0 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
1f2c0 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
1f2d0 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
1f2e0 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
1f2f0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
1f300 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73  CreateIndex(Pars
1f310 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
1f320 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69  ,SrcList*,ExprLi
1f330 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a  st*,int,Token*,.
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
1f360 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1f370 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
1f380 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
1f390 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
1f3a0 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
1f3b0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
1f3c0 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
1f3d0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
1f3e0 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
1f3f0 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
1f400 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
1f430 70 72 4c 69 73 74 2a 2c 75 31 36 2c 45 78 70 72  prList*,u16,Expr
1f440 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
1f450 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
1f460 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
1f470 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
1f480 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
1f490 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
1f4a0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1f4b0 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
1f4c0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
1f4d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
1f4e0 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
1f4f0 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
1f500 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
1f510 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1f520 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
1f530 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
1f540 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
1f550 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
1f560 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
1f570 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
1f580 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
1f590 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
1f5a0 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
1f5b0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
1f5c0 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
1f5d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
1f5e0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1f5f0 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
1f600 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
1f610 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
1f620 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
1f630 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
1f640 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
1f650 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1f660 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
1f670 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f680 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
1f690 66 6f 2a 29 3b 0a 75 36 34 20 73 71 6c 69 74 65  fo*);.u64 sqlite
1f6a0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
1f6b0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
1f6c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1f6d0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
1f6e0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1f6f0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
1f700 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
1f710 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
1f720 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
1f730 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1f740 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
1f750 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
1f760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f770 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
1f780 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
1f790 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f7a0 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
1f7b0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1f7c0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
1f7d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f7e0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
1f7f0 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
1f800 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f810 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1f820 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
1f830 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
1f840 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f850 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
1f860 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1f870 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1f880 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
1f890 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
1f8a0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1f8b0 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20 69 6e  hePop(Parse*, in
1f8c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f8d0 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28  ExprCacheRemove(
1f8e0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
1f8f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1f900 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 50 61  xprCacheClear(Pa
1f910 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f920 74 65 33 45 78 70 72 43 61 63 68 65 41 66 66 69  te3ExprCacheAffi
1f930 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72 73 65  nityChange(Parse
1f940 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1f950 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
1f960 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1f970 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1f980 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
1f990 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
1f9a0 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
1f9b0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
1f9c0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
1f9d0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f9e0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
1f9f0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
1fa00 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
1fa10 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61  te3ExprCodeAndCa
1fa20 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  che(Parse*, Expr
1fa30 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1fa40 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
1fa50 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
1fa60 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 75 38 29  rList*, int, u8)
1fa70 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1fa80 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
1fa90 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
1faa0 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
1fab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
1fac0 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
1fad0 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
1fae0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
1faf0 72 6d 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  rms */.void sqli
1fb00 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
1fb10 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
1fb20 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1fb30 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
1fb40 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
1fb50 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
1fb60 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
1fb70 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
1fb80 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
1fb90 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ar*);.Table *sql
1fba0 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
1fbb0 50 61 72 73 65 2a 2c 69 6e 74 20 69 73 56 69 65  Parse*,int isVie
1fbc0 77 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  w,const char*, c
1fbd0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62  onst char*);.Tab
1fbe0 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
1fbf0 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65  eTableItem(Parse
1fc00 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 73 74 72  *,int isView,str
1fc10 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1fc20 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69   *);.Index *sqli
1fc30 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c  te3FindIndex(sql
1fc40 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1fc50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
1fc60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
1fc70 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
1fc80 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  e(sqlite3*,int,c
1fc90 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1fca0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
1fcb0 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71  ndDeleteIndex(sq
1fcc0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1fcd0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1fce0 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72 73  lite3Vacuum(Pars
1fcf0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
1fd00 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
1fd10 2c 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 68 61  , sqlite3*);.cha
1fd20 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
1fd30 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
1fd40 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
1fd50 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
1fd60 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  e(Expr*, Expr*, 
1fd70 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1fd80 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
1fd90 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
1fda0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
1fdb0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
1fdc0 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
1fdd0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
1fde0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1fdf0 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
1fe00 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
1fe10 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1fe20 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
1fe30 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
1fe40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1fe50 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e 55  sqlite3FunctionU
1fe60 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72 2a  sesThisSrc(Expr*
1fe70 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62  , SrcList*);.Vdb
1fe80 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64 62  e *sqlite3GetVdb
1fe90 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
1fea0 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53  sqlite3PrngSaveS
1feb0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1fec0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74   sqlite3PrngRest
1fed0 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  oreState(void);.
1fee0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
1fef0 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a  backAll(sqlite3*
1ff00 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1ff10 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
1ff20 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ema(Parse*, int)
1ff30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1ff40 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68  deVerifyNamedSch
1ff50 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ema(Parse*, cons
1ff60 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f  t char *zDb);.vo
1ff70 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
1ff80 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
1ff90 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
1ffa0 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73  lite3CommitTrans
1ffb0 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a  action(Parse*);.
1ffc0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c  void sqlite3Roll
1ffd0 62 61 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28  backTransaction(
1ffe0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1fff0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
20000 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
20010 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
20020 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
20030 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
20040 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
20050 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
20060 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
20070 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
20080 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
20090 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
200a0 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
200b0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
200c0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
200d0 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
200e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
200f0 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
20100 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
20110 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
20120 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
20130 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
20140 70 72 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70  prCodeIsNullJump
20150 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78  (Vdbe*, const Ex
20160 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
20170 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
20180 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
20190 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
201a0 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
201b0 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
201c0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
201d0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
201e0 77 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54  wDelete(Parse*,T
201f0 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
20200 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
20210 38 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  8,u8,u8);.void s
20220 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
20230 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
20240 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
20250 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e  , int, int*);.in
20260 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
20270 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
20280 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
20290 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
202a0 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
202b0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
202c0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
202d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
202e0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
202f0 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
20320 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
20330 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
20340 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
20350 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
20360 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
20370 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20380 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
20390 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
203a0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  e*, int, int, u8
203b0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
203c0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
203d0 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
203e0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
203f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20400 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
20410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
20420 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
20430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
20440 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
20450 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
20460 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
20470 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
20480 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
20490 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
204a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
204b0 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
204c0 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
204d0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
204e0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
204f0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
20500 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
20510 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
20520 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
20530 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
20540 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
20550 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
20560 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
20570 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
20580 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
20590 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
205a0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
205b0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
205c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
205d0 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
205e0 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
205f0 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
20600 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
20610 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
20620 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
20630 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
20640 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
20650 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
20660 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
20670 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
20680 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
20690 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
206a0 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
206b0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
206c0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
206d0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
206e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
206f0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
20700 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
20710 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
20720 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
20730 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
20740 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
20750 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
20760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
20770 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
20780 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
20790 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
207a0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
207b0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
207c0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
207d0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
207e0 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
207f0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
20800 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
20810 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
20840 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
20850 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
20860 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
20870 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
20880 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
20890 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
208a0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
208b0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
208c0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
208d0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
208e0 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
208f0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
20900 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
20910 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
20920 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
20930 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
20940 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
20950 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
20960 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
20970 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
20980 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
20990 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
209a0 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
209b0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
209d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
209e0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
209f0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
20a00 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
20a10 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
20a20 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
20a30 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
20a40 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
20a50 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
20a60 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
20a70 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
20a80 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
20a90 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
20aa0 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
20ab0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
20ac0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
20ad0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
20ae0 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
20af0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
20b00 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
20b10 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
20b20 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
20b50 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
20b60 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
20b70 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
20b80 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
20b90 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
20ba0 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
20bb0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
20bc0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
20bd0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
20be0 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
20bf0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
20c00 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
20c10 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
20c20 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
20c30 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
20c40 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
20c50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
20c60 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
20c70 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
20c80 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
20c90 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
20ca0 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
20cb0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
20cc0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
20cd0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
20ce0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
20cf0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
20d00 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
20d10 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20  xist(B,C,D,E,F) 
20d20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
20d30 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  e3DeleteTrigger(
20d40 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
20d50 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
20d60 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  Ptr(A,B).# defin
20d70 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  e sqlite3UnlinkA
20d80 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
20d90 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20  A,B,C).# define 
20da0 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
20db0 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c  igger(A,B,C,D,E,
20dc0 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e  F,G,H,I).# defin
20dd0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
20de0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c  TriggerDirect(A,
20df0 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66  B,C,D,E,F).# def
20e00 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
20e10 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23  erList(X, Y) 0.#
20e20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
20e30 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
20e40 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  p.# define sqlit
20e50 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b  e3TriggerColmask
20e60 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20  (A,B,C,D,E,F,G) 
20e70 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  0.#endif..int sq
20e80 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61  lite3JoinType(Pa
20e90 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
20ea0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
20eb0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
20ec0 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  eForeignKey(Pars
20ed0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54  e*, ExprList*, T
20ee0 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a  oken*, ExprList*
20ef0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
20f00 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e  ite3DeferForeign
20f10 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  Key(Parse*, int)
20f20 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
20f30 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54  _OMIT_AUTHORIZAT
20f40 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
20f50 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65  e3AuthRead(Parse
20f60 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c  *,Expr*,Schema*,
20f70 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74  SrcList*);.  int
20f80 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
20f90 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f  k(Parse*,int, co
20fa0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20fb0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
20fc0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
20fd0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
20fe0 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68  ush(Parse*, Auth
20ff0 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20  Context*, const 
21000 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
21010 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
21020 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74  tPop(AuthContext
21030 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
21040 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72  3AuthReadCol(Par
21050 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
21060 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
21070 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64   int);.#else.# d
21080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
21090 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23  hRead(a,b,c,d).#
210a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
210b0 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  uthCheck(a,b,c,d
210c0 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b  ,e)    SQLITE_OK
210d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
210e0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
210f0 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65  (a,b,c).# define
21100 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
21110 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69  extPop(a)  ((voi
21120 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f  d)(a)).#endif.vo
21130 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68  id sqlite3Attach
21140 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
21150 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
21160 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63  oid sqlite3Detac
21170 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  h(Parse*, Expr*)
21180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
21190 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20  xInit(DbFixer*, 
211a0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  Parse*, int, con
211b0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
211c0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
211d0 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44  ite3FixSrcList(D
211e0 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74  bFixer*, SrcList
211f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
21200 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72  ixSelect(DbFixer
21210 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
21220 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28   sqlite3FixExpr(
21230 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29  DbFixer*, Expr*)
21240 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
21250 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72  ExprList(DbFixer
21260 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
21270 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69  nt sqlite3FixTri
21280 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72  ggerStep(DbFixer
21290 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29  *, TriggerStep*)
212a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
212b0 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  F(const char *z,
212c0 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75   double*, int, u
212d0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  8);.int sqlite3G
212e0 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68  etInt32(const ch
212f0 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  ar *, int*);.int
21300 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e   sqlite3Atoi(con
21310 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
21320 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c  qlite3Utf16ByteL
21330 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70  en(const void *p
21340 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29  Data, int nChar)
21350 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  ;.int sqlite3Utf
21360 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63  8CharLen(const c
21370 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  har *pData, int 
21380 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69  nByte);.u32 sqli
21390 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73  te3Utf8Read(cons
213a0 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20  t u8**);.LogEst 
213b0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36  sqlite3LogEst(u6
213c0 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  4);.LogEst sqlit
213d0 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45  e3LogEstAdd(LogE
213e0 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e  st,LogEst);.#ifn
213f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
21400 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67  VIRTUALTABLE.Log
21410 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
21420 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62  tFromDouble(doub
21430 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20  le);.#endif.u64 
21440 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
21450 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a  nt(LogEst);../*.
21460 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72  ** Routines to r
21470 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61  ead and write va
21480 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
21490 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75  tegers.  These u
214a0 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66  sed to.** be def
214b0 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75  ined locally, bu
214c0 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65  t now we use the
214d0 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73   varint routines
214e0 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a   in the util.c.*
214f0 2a 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68  * file.  Code sh
21500 6f 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43  ould use the MAC
21510 52 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20  RO forms below, 
21520 61 73 20 74 68 65 20 56 61 72 69 6e 74 33 32 20  as the Varint32 
21530 76 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20  versions.** are 
21540 63 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20  coded to assume 
21550 74 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20  the single byte 
21560 63 61 73 65 20 69 73 20 61 6c 72 65 61 64 79 20  case is already 
21570 68 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a  handled (which .
21580 2a 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72  ** the MACRO for
21590 6d 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20  m does)..*/.int 
215a0 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
215b0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
215c0 20 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u64);.int sqlit
215d0 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e  e3PutVarint32(un
215e0 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33  signed char*, u3
215f0 32 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  2);.u8 sqlite3Ge
21600 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
21610 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
21620 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
21630 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
21640 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
21650 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
21660 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
21670 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
21680 54 68 65 20 68 65 61 64 65 72 20 6f 66 20 61 20  The header of a 
21690 72 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20  record consists 
216a0 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20 76 61  of a sequence va
216b0 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e  riable-length in
216c0 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
216d0 20 69 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c   integers are al
216e0 6d 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c  most always smal
216f0 6c 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65  l and are encode
21700 64 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79  d as a single by
21710 74 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  te..** The follo
21720 77 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65  wing macros take
21730 20 61 64 76 61 6e 74 61 67 65 20 74 68 69 73 20   advantage this 
21740 66 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20  fact to provide 
21750 61 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a  a fast encode.**
21760 20 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74   and decode of t
21770 68 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61  he integers in a
21780 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20   record header. 
21790 20 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f   It is faster fo
217a0 72 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20  r the common.** 
217b0 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 69  case where the i
217c0 6e 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67  nteger is a sing
217d0 6c 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20  le byte.  It is 
217e0 61 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20  a little slower 
217f0 77 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65  when the.** inte
21800 67 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f  ger is two or mo
21810 72 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f  re bytes.  But o
21820 76 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73  verall it is fas
21830 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ter..**.** The f
21840 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73  ollowing express
21850 69 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c  ions are equival
21860 65 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78  ent:.**.**     x
21870 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72   = sqlite3GetVar
21880 69 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a  int32( A, &B );.
21890 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74  **     x = sqlit
218a0 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 20 41  e3PutVarint32( A
218b0 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20  , B );.**.**    
218c0 20 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32   x = getVarint32
218d0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20  ( A, B );.**    
218e0 20 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   x = putVarint32
218f0 28 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a  ( A, B );.**.*/.
21900 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
21910 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
21920 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
21930 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
21940 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
21950 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
21960 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
21970 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
21980 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
21990 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
219a0 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
219b0 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
219c0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
219d0 6e 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23  nt32((A),(B))).#
219e0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
219f0 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61      sqlite3GetVa
21a00 72 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74  rint.#define put
21a10 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65  Varint    sqlite
21a20 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e  3PutVarint...con
21a30 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
21a40 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
21a50 28 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a  (Vdbe *, Index *
21a60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
21a70 61 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28  ableAffinityStr(
21a80 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  Vdbe *, Table *)
21a90 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
21aa0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
21ab0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
21ac0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
21ad0 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
21ae0 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
21af0 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
21b00 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45  );.char sqlite3E
21b10 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72  xprAffinity(Expr
21b20 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71   *pExpr);.int sq
21b30 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73  lite3Atoi64(cons
21b40 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69  t char*, i64*, i
21b50 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
21b60 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
21b70 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
21b80 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
21b90 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c   *sqlite3HexToBl
21ba0 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  ob(sqlite3*, con
21bb0 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20  st char *z, int 
21bc0 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65  n);.u8 sqlite3He
21bd0 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69  xToInt(int h);.i
21be0 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72  nt sqlite3TwoPar
21bf0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54  tName(Parse *, T
21c00 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  oken *, Token *,
21c10 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66   Token **);..#if
21c20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
21c30 54 45 53 54 29 20 0a 63 6f 6e 73 74 20 63 68 61  TEST) .const cha
21c40 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
21c50 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
21c60 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
21c70 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
21c80 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
21c90 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
21ca0 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
21cb0 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
21cc0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
21cd0 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
21ce0 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
21cf0 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
21d00 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
21d10 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
21d20 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
21d30 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
21d40 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
21d50 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
21d60 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21d70 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
21d80 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
21d90 70 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  pr*, Token*);.Ex
21da0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
21db0 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
21dc0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
21dd0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
21de0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
21df0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
21e00 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
21e10 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
21e20 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
21e30 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
21e40 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
21e50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
21e60 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
21e70 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
21e80 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
21e90 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
21ea0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
21eb0 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
21ec0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
21ed0 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
21ee0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
21ef0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
21f00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
21f10 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
21f20 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
21f30 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
21f40 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
21f50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
21f60 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
21f70 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
21f80 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
21f90 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
21fa0 69 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  int);..const voi
21fb0 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
21fc0 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
21fd0 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
21fe0 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
21ff0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
22000 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
22010 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
22020 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
22030 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
22040 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
22050 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
22060 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
22070 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
22080 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
22090 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
220a0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
220b0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
220c0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
220d0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
220e0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
220f0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
22100 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
22110 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
22120 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
22130 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
22140 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
22150 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
22160 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
22170 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
22180 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
22190 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
221a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
221b0 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
221c0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
221d0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
221e0 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
221f0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
22200 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
22210 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
22220 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
22230 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
22240 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
22250 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
22260 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
22270 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
22280 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
22290 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
222a0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
222b0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
222c0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
222d0 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
222e0 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
222f0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
22300 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
22310 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
22320 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22330 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
22340 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
22350 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
22360 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
22370 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
22380 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
22390 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
223a0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
223b0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
223c0 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
223d0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
223e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
223f0 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
22400 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
22410 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
22420 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
22430 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
22440 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
22450 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
22460 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
22470 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
22480 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
22490 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
224a0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
224b0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
224c0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
224d0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
224e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
224f0 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
22500 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
22510 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
22520 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
22530 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
22540 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
22550 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
22560 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
22570 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
22580 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
22590 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
225a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
225b0 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
225c0 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
225d0 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
225e0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
225f0 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
22600 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
22610 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
22620 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
22630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
22640 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
22650 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
22660 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22670 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
22680 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
22690 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
226a0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
226b0 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
226c0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
226d0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
226e0 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
226f0 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
22700 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
22710 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
22720 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
22730 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69  char*, u8*);.voi
22740 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
22750 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
22760 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
22770 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
22780 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
22790 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
227a0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
227b0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
227c0 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
227d0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
227e0 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
227f0 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
22800 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
22810 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
22820 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
22830 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
22840 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
22850 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
22860 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
22870 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
22880 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
22890 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
228a0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
228b0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
228c0 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
228d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
228e0 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
228f0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
22900 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
22910 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
22920 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
22930 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
22940 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
22950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
22960 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
22970 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
22980 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
22990 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
229a0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
229b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b  );.void sqlite3K
229c0 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49  eyInfoUnref(KeyI
229d0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
229e0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65  sqlite3KeyInfoRe
229f0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
22a00 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
22a10 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73  InfoOfIndex(Pars
22a20 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66  e*, Index*);.#if
22a30 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
22a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49  .int sqlite3KeyI
22a50 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b  nfoIsWriteable(K
22a60 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66  eyInfo*);.#endif
22a70 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61  .int sqlite3Crea
22a80 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a  teFunc(sqlite3 *
22a90 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
22aa0 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a  int, int, void *
22ab0 2c 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  , .  void (*)(sq
22ac0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
22ad0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
22ae0 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
22af0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
22b00 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
22b10 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a  lue **), void (*
22b20 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
22b30 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72  t*),.  FuncDestr
22b40 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
22b50 6f 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  or.);.int sqlite
22b60 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33  3ApiExit(sqlite3
22b70 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   *db, int);.int 
22b80 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44  sqlite3OpenTempD
22b90 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29  atabase(Parse *)
22ba0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ;..void sqlite3S
22bb0 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41  trAccumInit(StrA
22bc0 63 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e  ccum*, char*, in
22bd0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
22be0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70  lite3StrAccumApp
22bf0 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  end(StrAccum*,co
22c00 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
22c10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
22c20 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74  ccumAppendAll(St
22c30 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68  rAccum*,const ch
22c40 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
22c50 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53 74  e3AppendSpace(St
22c60 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68  rAccum*,int);.ch
22c70 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
22c80 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
22c90 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
22ca0 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
22cb0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
22cc0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
22cd0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
22ce0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
22cf0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
22d00 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
22d10 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
22d20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
22d30 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
22d40 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
22d50 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
22d60 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
22d70 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
22d80 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
22d90 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66 20   u8 *);..#ifdef 
22da0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
22db0 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
22dc0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
22dd0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
22de0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
22df0 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 50  4ProbeSetValue(P
22e00 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70  arse*,Index*,Unp
22e10 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78  ackedRecord**,Ex
22e20 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 29  pr*,u8,int,int*)
22e30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
22e40 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
22e50 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 23  ackedRecord*);.#
22e60 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
22e70 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
22e80 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
22e90 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
22ea0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
22eb0 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73 69  lloc(void*(*)(si
22ec0 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71 6c  ze_t));.void sql
22ed0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
22ee0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
22ef0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
22f00 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
22f10 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
22f20 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
22f30 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
22f40 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
22f50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
22f60 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
22f70 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
22f80 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
22f90 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
22fa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
22fb0 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
22fc0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
22fd0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
22fe0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
22ff0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
23000 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
23010 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
23020 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
23030 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
23040 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
23050 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
23060 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
23070 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
23080 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
23090 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
230a0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
230b0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
230c0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
230d0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
230e0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
230f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
23100 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
23110 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
23120 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
23130 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
23140 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
23150 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
23160 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
23170 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
23180 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
23190 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
231a0 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
231b0 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
231c0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 20  ite3VtabLock(X) 
231d0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
231e0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
231f0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
23200 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
23210 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
23220 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
23230 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
23240 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
23250 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
23260 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
23270 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
23280 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
23290 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
232a0 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
232b0 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
232c0 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
232d0 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
232e0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
232f0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
23300 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
23310 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
23320 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
23330 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
23340 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
23350 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
23360 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
23370 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
23380 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
23390 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
233a0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
233b0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
233c0 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
233d0 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
233e0 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
233f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
23400 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
23410 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
23420 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
23430 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
23440 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
23450 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
23460 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  );.#  define sql
23470 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
23480 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e  b) ((db)->nVTran
23490 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54  s>0 && (db)->aVT
234a0 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  rans==0).#endif.
234b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
234c0 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61 72  MakeWritable(Par
234d0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69  se*,Table*);.voi
234e0 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  d sqlite3VtabBeg
234f0 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  inParse(Parse*, 
23500 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
23510 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Token*, int);.vo
23520 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46 69  id sqlite3VtabFi
23530 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65 2a  nishParse(Parse*
23540 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
23550 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49 6e  sqlite3VtabArgIn
23560 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  it(Parse*);.void
23570 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 45   sqlite3VtabArgE
23580 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f  xtend(Parse*, To
23590 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
235a0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
235b0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
235c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 68  const char *, ch
235d0 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ar **);.int sqli
235e0 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65  te3VtabCallConne
235f0 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ct(Parse*, Table
23600 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
23610 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 73  tabCallDestroy(s
23620 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f  qlite3*, int, co
23630 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74  nst char *);.int
23640 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
23650 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54 61  n(sqlite3 *, VTa
23660 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20  ble *);.FuncDef 
23670 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65 72  *sqlite3VtabOver
23680 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c  loadFunction(sql
23690 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c  ite3 *,FuncDef*,
236a0 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72 2a   int nArg, Expr*
236b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
236c0 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73  nvalidFunction(s
236d0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
236e0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
236f0 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  e**);.sqlite3_in
23700 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
23710 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
23720 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
23730 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
23740 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
23750 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
23760 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
23770 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
23780 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
23790 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
237a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
237b0 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
237c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
237d0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
237e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
237f0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
23800 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
23810 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
23820 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
23830 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
23840 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
23850 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
23860 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
23870 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
23880 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
23890 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
238a0 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
238b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
238c0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
238d0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
238e0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
238f0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
23900 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
23910 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
23920 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
23930 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
23940 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
23950 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
23960 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
23970 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
23980 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
23990 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
239a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
239b0 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
239c0 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
239d0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
239e0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 29 3b 0a  Parse*, With*);.
239f0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
23a00 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
23a10 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
23a20 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
23a30 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
23a40 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
23a50 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
23a60 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
23a70 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
23a80 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
23a90 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
23aa0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
23ab0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
23ac0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
23ad0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
23ae0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
23af0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
23b00 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
23b10 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
23b20 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
23b30 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
23b40 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
23b50 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
23b60 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
23b70 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64  ty is .** provid
23b80 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
23b90 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
23ba0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
23bb0 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
23bc0 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
23bd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
23be0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
23bf0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23c00 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
23c10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
23c20 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
23c30 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
23c40 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
23c50 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
23c60 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
23c70 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
23c80 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
23c90 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
23ca0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
23cb0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
23cc0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
23cd0 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
23ce0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
23cf0 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
23d00 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
23d10 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
23d20 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
23d30 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
23d40 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
23d50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
23d60 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
23d70 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
23d80 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
23d90 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
23da0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
23db0 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
23dc0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
23dd0 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
23de0 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
23df0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
23e00 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
23e10 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
23e20 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
23e30 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
23e40 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
23e50 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
23e60 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
23e70 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
23e80 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
23e90 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
23ea0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
23eb0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
23ec0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
23ed0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
23ee0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
23ef0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
23f00 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
23f10 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
23f20 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
23f30 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
23f40 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
23f50 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
23f60 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
23f70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
23f80 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
23f90 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
23fa0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
23fb0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
23fc0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
23fd0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
23fe0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
23ff0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
24000 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
24010 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
24020 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e  TIN_TEST.** is n
24030 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
24040 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24050 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
24060 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65    void sqlite3Be
24070 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
24080 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71  void);.  void sq
24090 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
240a0 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73  lloc(void);.#els
240b0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
240c0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
240d0 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65  lloc().  #define
240e0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
240f0 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66  nMalloc().#endif
24100 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  ..#define IN_IND
24110 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
24120 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f     1.#define IN_
24130 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
24140 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20        2.#define 
24150 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
24160 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66 69  SC       3.#defi
24170 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
24180 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e  X_DESC      4.in
24190 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
241a0 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
241b0 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69  pr *, int*);..#i
241c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
241d0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a  LE_ATOMIC_WRITE.
241e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
241f0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
24200 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
24210 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
24220 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
24230 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
24240 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
24250 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20  3_vfs *);.  int 
24260 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
24270 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
24280 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  e *);.  int sqli
24290 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73  te3JournalExists
242a0 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
242b0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
242c0 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  ne sqlite3Journa
242d0 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70 56  lSize(pVfs) ((pV
242e0 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20  fs)->szOsFile). 
242f0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
24300 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29  JournalExists(p)
24310 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20   1.#endif..void 
24320 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
24330 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69  lOpen(sqlite3_fi
24340 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  le *);.int sqlit
24350 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65  e3MemJournalSize
24360 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
24370 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28  te3IsMemJournal(
24380 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
24390 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ..#if SQLITE_MAX
243a0 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
243b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
243c0 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65 20  SetHeight(Parse 
243d0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
243e0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
243f0 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
24400 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
24410 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
24420 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
24430 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
24440 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
24450 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79 29  prSetHeight(x,y)
24460 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
24470 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
24480 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
24490 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
244a0 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
244b0 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
244c0 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
244d0 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
244e0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
244f0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
24500 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
24510 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
24520 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
24530 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
24540 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
24550 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
24560 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
24570 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
24580 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
24590 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
245a0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
245b0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
245c0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
245d0 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
245e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
245f0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
24600 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
24610 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
24620 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
24630 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24640 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
24650 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
24660 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
24670 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
24680 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
24690 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
246a0 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
246b0 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
246c0 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
246d0 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
246e0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
246f0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
24700 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
24710 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65  sages. .*/.#ifde
24720 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24730 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
24740 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
24750 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
24760 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
24770 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
24780 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
24790 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
247a0 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
247b0 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
247c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
247d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
247e0 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
247f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
24800 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
24810 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
24820 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
24830 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
24840 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
24850 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
24860 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
24870 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
24880 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
24890 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
248a0 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
248b0 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
248c0 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
248d0 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
248e0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
248f0 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
24900 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
24910 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
24920 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
24930 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
24940 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
24950 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
24960 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
24970 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
24980 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
24990 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
249a0 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
249b0 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
249c0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
249d0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
249e0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
249f0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
24a00 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
24a10 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
24a20 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
24a30 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
24a40 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
24a50 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
24a60 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
24a70 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
24a80 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
24a90 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
24aa0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
24ab0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
24ac0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
24ad0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
24ae0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
24af0 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
24b00 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
24b10 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
24b20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
24b30 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
24b40 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
24b50 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
24b60 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
24b70 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
24b80 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
24b90 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
24ba0 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
24bb0 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
24bc0 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
24bd0 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
24be0 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
24bf0 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
24c00 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
24c10 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
24c20 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
24c30 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
24c40 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
24c50 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
24c60 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
24c70 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
24c80 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
24c90 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
24ca0 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
24cb0 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
24cc0 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
24cd0 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
24ce0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
24cf0 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
24d00 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20  his constraint. 
24d10 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
24d20 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
24d30 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
24d40 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
24d50 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
24d60 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
24d70 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
24d80 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
24d90 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
24da0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
24db0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
24dc0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
24dd0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
24de0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
24df0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
24e00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
24e10 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
24e20 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
24e30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
24e40 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
24e50 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
24e60 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24e70 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
24e80 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
24e90 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
24ea0 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
24eb0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
24ec0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
24ed0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
24ee0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
24ef0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
24f00 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
24f10 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74    0x02  /* Might
24f20 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
24f30 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23  side memory */.#
24f40 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53  define MEMTYPE_S
24f50 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20  CRATCH    0x04  
24f60 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63  /* Scratch alloc
24f70 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ations */.#defin
24f80 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45  e MEMTYPE_PCACHE
24f90 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61       0x08  /* Pa
24fa0 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74  ge cache allocat
24fb0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
24fc0 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20  MEMTYPE_DB      
24fd0 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73     0x10  /* Uses
24fe0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
24ff0 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c  , not sqlite_mal
25000 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f  loc */..#endif /
25010 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20  * _SQLITEINT_H_ 
25020 2a 2f 0a                                         */.