/ Hex Artifact Content
Login

Artifact bf4e57f30d67a0720fe7bc35926fdd0f0f07972f:


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 54 68 65 20 74 65 73  f../*.** The tes
1df0: 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73  tcase() macro is
1e00: 20 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20   used to aid in 
1e10: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
1e20: 2e 20 20 57 68 65 6e 20 0a 2a 2a 20 64 6f 69 6e  .  When .** doin
1e30: 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74 69  g coverage testi
1e40: 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f  ng, the conditio
1e50: 6e 20 69 6e 73 69 64 65 20 74 68 65 20 61 72 67  n inside the arg
1e60: 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74  ument to.** test
1e70: 63 61 73 65 28 29 20 6d 75 73 74 20 62 65 20 65  case() must be e
1e80: 76 61 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72  valuated both tr
1e90: 75 65 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20  ue and false in 
1ea0: 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20  order to.** get 
1eb0: 66 75 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65  full branch cove
1ec0: 72 61 67 65 2e 20 20 54 68 65 20 74 65 73 74 63  rage.  The testc
1ed0: 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69  ase() macro is i
1ee0: 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65  nserted.** to he
1ef0: 6c 70 20 65 6e 73 75 72 65 20 61 64 65 71 75 61  lp ensure adequa
1f00: 74 65 20 74 65 73 74 20 63 6f 76 65 72 61 67 65  te test coverage
1f10: 20 69 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65   in places where
1f20: 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69   simple.** condi
1f30: 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f  tion/decision co
1f40: 76 65 72 61 67 65 20 69 73 20 69 6e 61 64 65 71  verage is inadeq
1f50: 75 61 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70  uate.  For examp
1f60: 6c 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  le, testcase().*
1f70: 2a 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  * can be used to
1f80: 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64   make sure bound
1f90: 61 72 79 20 76 61 6c 75 65 73 20 61 72 65 20 74  ary values are t
1fa0: 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62  ested.  For.** b
1fb0: 69 74 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65  itmask tests, te
1fc0: 73 74 63 61 73 65 28 29 20 63 61 6e 20 62 65 20  stcase() can be 
1fd0: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
1fe0: 65 20 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73  e each bit.** is
1ff0: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64   significant and
2000: 20 75 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f   used at least o
2010: 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20  nce.  On switch 
2020: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68  statements.** wh
2030: 65 72 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73  ere multiple cas
2040: 65 73 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d  es go to the sam
2050: 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c  e block of code,
2060: 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63   testcase().** c
2070: 61 6e 20 69 6e 73 75 72 65 20 74 68 61 74 20 61  an insure that a
2080: 6c 6c 20 63 61 73 65 73 20 61 72 65 20 65 76 61  ll cases are eva
2090: 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69  luated..**.*/.#i
20a0: 66 64 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45  fdef SQLITE_COVE
20b0: 52 41 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64  RAGE_TEST.  void
20c0: 20 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65   sqlite3Coverage
20d0: 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
20e0: 74 65 73 74 63 61 73 65 28 58 29 20 20 69 66 28  testcase(X)  if(
20f0: 20 58 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76   X ){ sqlite3Cov
2100: 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b  erage(__LINE__);
2110: 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   }.#else.# defin
2120: 65 20 74 65 73 74 63 61 73 65 28 58 29 0a 23 65  e testcase(X).#e
2130: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2140: 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69  TESTONLY macro i
2150: 73 20 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73  s used to enclos
2160: 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61  e variable decla
2170: 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74  rations or.** ot
2180: 68 65 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65  her bits of code
2190: 20 74 68 61 74 20 61 72 65 20 6e 65 65 64 65 64   that are needed
21a0: 20 74 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20   to support the 
21b0: 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74  arguments.** wit
21c0: 68 69 6e 20 74 65 73 74 63 61 73 65 28 29 20 61  hin testcase() a
21d0: 6e 64 20 61 73 73 65 72 74 28 29 20 6d 61 63 72  nd assert() macr
21e0: 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  os..*/.#if !defi
21f0: 6e 65 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64  ned(NDEBUG) || d
2200: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
2210: 56 45 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64  VERAGE_TEST).# d
2220: 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58  efine TESTONLY(X
2230: 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66  )  X.#else.# def
2240: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a  ine TESTONLY(X).
2250: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
2260: 6d 65 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20  metimes we need 
2270: 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f  a small amount o
2280: 66 20 63 6f 64 65 20 73 75 63 68 20 61 73 20 61  f code such as a
2290: 20 76 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61   variable initia
22a0: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73  lization.** to s
22b0: 65 74 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72  etup for a later
22c0: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
22d0: 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20  ent.  We do not 
22e0: 77 61 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74  want this code t
22f0: 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e  o.** appear when
2300: 20 61 73 73 65 72 74 28 29 20 69 73 20 64 69 73   assert() is dis
2310: 61 62 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c  abled.  The foll
2320: 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74  owing macro is t
2330: 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64  herefore.** used
2340: 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74   to contain that
2350: 20 73 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68   setup code.  Th
2360: 65 20 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20  e "VVA" acronym 
2370: 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56  stands for.** "V
2380: 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c  erification, Val
2390: 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63  idation, and Acc
23a0: 72 65 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e  reditation".  In
23b0: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
23c0: 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e  e.** code within
23d0: 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c   VVA_ONLY() will
23e0: 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67   only run during
23f0: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72   verification pr
2400: 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e  ocesses..*/.#ifn
2410: 64 65 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66  def NDEBUG.# def
2420: 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20  ine VVA_ONLY(X) 
2430: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
2440: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65  e VVA_ONLY(X).#e
2450: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2460: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
2470: 20 6d 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64   macros surround
2480: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
2490: 69 6f 6e 73 20 77 68 69 63 68 20 0a 2a 2a 20 61  ions which .** a
24a0: 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f 20 61  re intended to a
24b0: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 6f 72  lways be true or
24c0: 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63 74 69   false, respecti
24d0: 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65  vely.  Such.** e
24e0: 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64  xpressions could
24f0: 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   be omitted from
2500: 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65   the code comple
2510: 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65 79 0a  tely.  But they.
2520: 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  ** are included 
2530: 69 6e 20 61 20 66 65 77 20 63 61 73 65 73 20 69  in a few cases i
2540: 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68 61 6e  n order to enhan
2550: 63 65 20 74 68 65 20 72 65 73 69 6c 69 65 6e 63  ce the resilienc
2560: 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65 20 74  e.** of SQLite t
2570: 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62 65 68  o unexpected beh
2580: 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20  avior - to make 
2590: 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66 2d 68  the code "self-h
25a0: 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64  ealing".** or "d
25b0: 75 63 74 69 6c 65 22 20 72 61 74 68 65 72 20 74  uctile" rather t
25c0: 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69 74 74  han being "britt
25d0: 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69 6e 67  le" and crashing
25e0: 20 61 74 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   at the first.**
25f0: 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e   hint of unplann
2600: 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a  ed behavior..**.
2610: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2620: 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  s, ALWAYS and NE
2630: 56 45 52 20 61 72 65 20 61 64 64 65 64 20 66 6f  VER are added fo
2640: 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f 64 65  r defensive code
2650: 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69  ..**.** When doi
2660: 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65 73 74  ng coverage test
2670: 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  ing ALWAYS and N
2680: 45 56 45 52 20 61 72 65 20 68 61 72 64 2d 63 6f  EVER are hard-co
2690: 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75  ded to.** be tru
26a0: 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f 20 74  e and false so t
26b0: 68 61 74 20 74 68 65 20 75 6e 72 65 61 63 68 61  hat the unreacha
26c0: 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20 73 70  ble code they sp
26d0: 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  ecify will.** no
26e0: 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61 73 20  t be counted as 
26f0: 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a  untested code..*
2700: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
2710: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
2720: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57  ST).# define ALW
2730: 41 59 53 28 58 29 20 20 20 20 20 20 28 31 29 0a  AYS(X)      (1).
2740: 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58  # define NEVER(X
2750: 29 20 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69  )       (0).#eli
2760: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
2770: 47 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  G).# define ALWA
2780: 59 53 28 58 29 20 20 20 20 20 20 28 28 58 29 3f  YS(X)      ((X)?
2790: 31 3a 28 61 73 73 65 72 74 28 30 29 2c 30 29 29  1:(assert(0),0))
27a0: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
27b0: 58 29 20 20 20 20 20 20 20 28 28 58 29 3f 28 61  X)       ((X)?(a
27c0: 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23  ssert(0),1):0).#
27d0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c  else.# define AL
27e0: 57 41 59 53 28 58 29 20 20 20 20 20 20 28 58 29  WAYS(X)      (X)
27f0: 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28  .# define NEVER(
2800: 58 29 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e  X)       (X).#en
2810: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  dif../*.** Retur
2820: 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f  n true (non-zero
2830: 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 69  ) if the input i
2840: 73 20 61 20 69 6e 74 65 67 65 72 20 74 68 61 74  s a integer that
2850: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a   is too large.**
2860: 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69   to fit in 32-bi
2870: 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20  ts.  This macro 
2880: 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
2890: 66 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61  f various testca
28a0: 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74  se().** macros t
28b0: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65  o verify that we
28c0: 20 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c   have tested SQL
28d0: 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69  ite for large-fi
28e0: 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23  le support..*/.#
28f0: 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e  define IS_BIG_IN
2900: 54 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36  T(X)  (((X)&~(i6
2910: 34 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30  4)0xffffffff)!=0
2920: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63  )../*.** The mac
2930: 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73  ro unlikely() is
2940: 20 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72   a hint that sur
2950: 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e  rounds a boolean
2960: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74  .** expression t
2970: 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66  hat is usually f
2980: 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b  alse.  Macro lik
2990: 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a  ely() surrounds.
29a0: 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ** a boolean exp
29b0: 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
29c0: 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 54  usually true.  T
29d0: 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c 64  hese hints could
29e0: 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c 20  ,.** in theory, 
29f0: 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 63  be used by the c
2a00: 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65 72  ompiler to gener
2a10: 61 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c  ate better code,
2a20: 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   but.** currentl
2a30: 79 20 74 68 65 79 20 61 72 65 20 6a 75 73 74 20  y they are just 
2a40: 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75 6d  comments for hum
2a50: 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a 23  an readers..*/.#
2a60: 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29  define likely(X)
2a70: 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65 20      (X).#define 
2a80: 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58 29  unlikely(X)  (X)
2a90: 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68  ..#include "hash
2aa0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
2ab0: 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  rse.h".#include 
2ac0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <stdio.h>.#inclu
2ad0: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69  de <stdlib.h>.#i
2ae0: 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68  nclude <string.h
2af0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65  >.#include <asse
2b00: 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  rt.h>.#include <
2b10: 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a  stddef.h>../*.**
2b20: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
2b30: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
2b40: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
2b50: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
2b60: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
2b70: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
2b80: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
2b90: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
2bb0: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
2bc0: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
2bd0: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
2be0: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
2bf0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
2c00: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
2c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
2c20: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
2c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
2c40: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
2c50: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
2c60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2c70: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
2c80: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
2c90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
2ca0: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
2cb0: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
2cc0: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
2cd0: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
2ce0: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
2cf0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
2d00: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
2d10: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
2d20: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
2d30: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
2d40: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
2d50: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
2d60: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
2d70: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
2d80: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
2d90: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
2da0: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
2db0: 72 20 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f  r .** to omit co
2dc0: 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20  de used by TEMP 
2dd0: 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d  tables without m
2de0: 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61  essy #ifndef sta
2df0: 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64  tements..*/.#ifd
2e00: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
2e10: 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d  EMPDB.#define OM
2e20: 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73  IT_TEMPDB 1.#els
2e30: 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  e.#define OMIT_T
2e40: 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a  EMPDB 0.#endif..
2e50: 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20  /*.** The "file 
2e60: 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69  format" number i
2e70: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61  s an integer tha
2e80: 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2e90: 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65   whenever.** the
2ea0: 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65   VDBE-level file
2eb0: 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e   format changes.
2ec0: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
2ed0: 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68  macros define th
2ee0: 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74  e.** the default
2ef0: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72   file format for
2f00: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61   new databases a
2f10: 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66  nd the maximum f
2f20: 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68  ile format.** th
2f30: 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  at the library c
2f40: 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66  an read..*/.#def
2f50: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46  ine SQLITE_MAX_F
2f60: 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66  ILE_FORMAT 4.#if
2f70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
2f80: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a  ULT_FILE_FORMAT.
2f90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2fa0: 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52  DEFAULT_FILE_FOR
2fb0: 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a  MAT 4.#endif../*
2fc0: 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68  .** Determine wh
2fd0: 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61  ether triggers a
2fe0: 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20  re recursive by 
2ff0: 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63  default.  This c
3000: 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64  an be.** changed
3010: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69   at run-time usi
3020: 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  ng a pragma..*/.
3030: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
3040: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3050: 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69  _TRIGGERS.# defi
3060: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
3070: 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47  T_RECURSIVE_TRIG
3080: 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  GERS 0.#endif../
3090: 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64  *.** Provide a d
30a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
30b0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
30c0: 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73  RE in case it is
30d0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a   not specified.*
30e0: 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  * on the command
30f0: 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  -line.*/.#ifndef
3100: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
3110: 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RE.# define SQLI
3120: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a  TE_TEMP_STORE 1.
3130: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3140: 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20  TEMP_STORE_xc 1 
3150: 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d   /* Exclude from
3160: 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64   ctime.c */.#end
3170: 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f  if../*.** GCC do
3180: 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74 68  es not define th
3190: 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61 63  e offsetof() mac
31a0: 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76 65  ro so we'll have
31b0: 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75 72   to do it.** our
31c0: 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64  selves..*/.#ifnd
31d0: 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65 66  ef offsetof.#def
31e0: 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54 52  ine offsetof(STR
31f0: 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28 28  UCTURE,FIELD) ((
3200: 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28 53  int)((char*)&((S
3210: 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46 49  TRUCTURE*)0)->FI
3220: 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ELD)).#endif../*
3230: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63 6f  .** Macros to co
3240: 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61 6e  mpute minimum an
3250: 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77 6f  d maximum of two
3260: 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 64 65   numbers..*/.#de
3270: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
3280: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
3290: 23 64 65 66 69 6e 65 20 4d 41 58 28 41 2c 42 29  #define MAX(A,B)
32a0: 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a 28 42   ((A)>(B)?(A):(B
32b0: 29 29 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  ))../*.** Check 
32c0: 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d  to see if this m
32d0: 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44  achine uses EBCD
32e0: 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65  IC.  (Yes, belie
32f0: 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c  ve it or.** not,
3300: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
3310: 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68   machines out th
3320: 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43  ere that use EBC
3330: 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27  DIC.).*/.#if 'A'
3340: 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66   == '\301'.# def
3350: 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49  ine SQLITE_EBCDI
3360: 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  C 1.#else.# defi
3370: 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20  ne SQLITE_ASCII 
3380: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
3390: 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77  Integers of know
33a0: 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20  n sizes.  These 
33b0: 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63  typedefs might c
33c0: 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74  hange for archit
33d0: 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65  ectures.** where
33e0: 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e   the sizes very.
33f0: 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d    Preprocessor m
3400: 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61  acros are availa
3410: 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a  ble so that the.
3420: 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20  ** types can be 
3430: 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64  conveniently red
3440: 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c  efined at compil
3450: 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68  e-type.  Like th
3460: 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20  is:.**.**       
3470: 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f    cc '-DUINTPTR_
3480: 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69  TYPE=long long i
3490: 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64  nt' ....*/.#ifnd
34a0: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23  ef UINT32_TYPE.#
34b0: 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54   ifdef HAVE_UINT
34c0: 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55  32_T.#  define U
34d0: 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33  INT32_TYPE uint3
34e0: 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  2_t.# else.#  de
34f0: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
3500: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20   unsigned int.# 
3510: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3520: 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  ndef UINT16_TYPE
3530: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
3540: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
3550: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e   UINT16_TYPE uin
3560: 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  t16_t.# else.#  
3570: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
3580: 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72  PE unsigned shor
3590: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
35a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
35b0: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
35c0: 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20  HAVE_INT16_T.#  
35d0: 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50  define INT16_TYP
35e0: 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65  E int16_t.# else
35f0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
3600: 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a  _TYPE short int.
3610: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
3620: 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ifndef UINT8_TYP
3630: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
3640: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
3650: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74   UINT8_TYPE uint
3660: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
3670: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
3680: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20  unsigned char.# 
3690: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
36a0: 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23  ndef INT8_TYPE.#
36b0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38   ifdef HAVE_INT8
36c0: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
36d0: 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20  8_TYPE int8_t.# 
36e0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
36f0: 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20  NT8_TYPE signed 
3700: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
3710: 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47  dif.#ifndef LONG
3720: 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65  DOUBLE_TYPE.# de
3730: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
3740: 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65  TYPE long double
3750: 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20  .#endif.typedef 
3760: 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34  sqlite_int64 i64
3770: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  ;          /* 8-
3780: 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65  byte signed inte
3790: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73  ger */.typedef s
37a0: 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34  qlite_uint64 u64
37b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62  ;         /* 8-b
37c0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
37d0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
37e0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b  UINT32_TYPE u32;
37f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d             /* 4-
3800: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
3810: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
3820: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36   UINT16_TYPE u16
3830: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32  ;           /* 2
3840: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
3850: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
3860: 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36  f INT16_TYPE i16
3870: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
3880: 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
3890: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
38a0: 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20   UINT8_TYPE u8; 
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
38c0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
38d0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
38e0: 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20  f INT8_TYPE i8; 
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3900: 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
3910: 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  teger */../*.** 
3920: 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69  SQLITE_MAX_U32 i
3930: 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74  s a u64 constant
3940: 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78   that is the max
3950: 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a  imum u64 value.*
3960: 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74  * that can be st
3970: 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69  ored in a u32 wi
3980: 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61  thout loss of da
3990: 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ta.  The value.*
39a0: 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66  * is 0x00000000f
39b0: 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65  fffffff.  But be
39c0: 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20  cause of quirks 
39d0: 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  of some compiler
39e0: 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f  s, we.** have to
39f0: 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c   specify the val
3a00: 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69  ue in the less i
3a10: 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20  ntuitive manner 
3a20: 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e  shown:.*/.#defin
3a30: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  e SQLITE_MAX_U32
3a40: 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32    ((((u64)1)<<32
3a50: 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
3a60: 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f  datatype used to
3a70: 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73   store estimates
3a80: 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   of the number o
3a90: 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74  f rows in a.** t
3aa0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
3ab0: 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67  This is an unsig
3ac0: 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65  ned integer type
3ad0: 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a  .  For 99.9% of.
3ae0: 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20  ** the world, a 
3af0: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69  32-bit integer i
3b00: 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42  s sufficient.  B
3b10: 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  ut a 64-bit inte
3b20: 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  ger.** can be us
3b30: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
3b40: 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a  me if desired..*
3b50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
3b60: 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70  64BIT_STATS. typ
3b70: 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74  edef u64 tRowcnt
3b80: 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f  ;    /* 64-bit o
3b90: 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64  nly if requested
3ba0: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
3bb0: 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64   */.#else. typed
3bc0: 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20  ef u32 tRowcnt; 
3bd0: 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20     /* 32-bit is 
3be0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  the default */.#
3bf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74  endif../*.** Est
3c00: 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65  imated quantitie
3c10: 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79  s used for query
3c20: 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74   planning are st
3c30: 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a  ored as 16-bit.*
3c40: 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46  * logarithms.  F
3c50: 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74  or quantity X, t
3c60: 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
3c70: 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20  is 10*log2(X).  
3c80: 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20  This.** gives a 
3c90: 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f  possible range o
3ca0: 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72  f values of appr
3cb0: 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38  oximately 1.0e98
3cc0: 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20  6 to 1e-986..** 
3cd0: 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20  But the allowed 
3ce0: 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69  values are "grai
3cf0: 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20  ny".  Not every 
3d00: 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65  value is represe
3d10: 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65  ntable..** For e
3d20: 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69  xample, quantiti
3d30: 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65  es 16 and 17 are
3d40: 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65   both represente
3d50: 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a  d by a LogEst.**
3d60: 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72   of 40.  However
3d70: 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71  , since LogEst q
3d80: 75 61 6e 74 61 74 69 74 65 73 20 61 72 65 20 73  uantatites are s
3d90: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
3da0: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
3db0: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
3dc0: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
3dd0: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
3de0: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
3df0: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
3e00: 61 72 69 74 68 69 6d 69 63 20 45 73 74 69 6d 61  arithimic Estima
3e10: 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70  te"..**.** Examp
3e20: 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d  les:.**      1 -
3e30: 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20  > 0             
3e40: 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20   20 -> 43       
3e50: 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a     10000 -> 132.
3e60: 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20  **      2 -> 10 
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d              25 -
3e80: 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35  > 46          25
3e90: 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20  000 -> 146.**   
3ea0: 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20     3 -> 16      
3eb0: 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20        100 -> 66 
3ec0: 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d         1000000 -
3ed0: 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20  > 199.**      4 
3ee0: 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20  -> 20           
3ef0: 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20  1000 -> 99      
3f00: 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30    1048576 -> 200
3f10: 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33  .**     10 -> 33
3f20: 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20             1024 
3f30: 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36  -> 100    429496
3f40: 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a  7296 -> 320.**.*
3f50: 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e  * The LogEst can
3f60: 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20   be negative to 
3f70: 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f  indicate fractio
3f80: 6e 61 6c 20 76 61 6c 75 65 73 2e 20 0a 2a 2a 20  nal values. .** 
3f90: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
3fa0: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
3fb0: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
3fc0: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
3fd0: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
3fe0: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
3ff0: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  gEst;../*.** Mac
4000: 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
4010: 20 77 68 65 74 68 65 72 20 74 68 65 20 6d 61 63   whether the mac
4020: 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72 20 6c  hine is big or l
4030: 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a  ittle endian,.**
4040: 20 65 76 61 6c 75 61 74 65 64 20 61 74 20 72 75   evaluated at ru
4050: 6e 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ntime..*/.#ifdef
4060: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
4070: 54 49 4f 4e 0a 63 6f 6e 73 74 20 69 6e 74 20 73  TION.const int s
4080: 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23  qlite3one = 1;.#
4090: 65 6c 73 65 0a 65 78 74 65 72 6e 20 63 6f 6e 73  else.extern cons
40a0: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
40b0: 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
40c0: 69 6e 65 64 28 69 33 38 36 29 20 7c 7c 20 64 65  ined(i386) || de
40d0: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
40e0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
40f0: 38 36 29 5c 0a 20 20 20 20 20 20 20 20 20 20 20  86)\.           
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4110: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
4120: 38 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65  86_64) || define
4130: 64 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 0a 23 20  d(__x86_64__).# 
4140: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4150: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
4160: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
4170: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
4180: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
4190: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
41a0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
41b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
41c0: 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68  GENDIAN    (*(ch
41d0: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
41e0: 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  e)==0).# define 
41f0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
4200: 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26  IAN (*(char *)(&
4210: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a  sqlite3one)==1).
4220: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4230: 55 54 46 31 36 4e 41 54 49 56 45 20 28 53 51 4c  UTF16NATIVE (SQL
4240: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51  ITE_BIGENDIAN?SQ
4250: 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c  LITE_UTF16BE:SQL
4260: 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e  ITE_UTF16LE).#en
4270: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74  dif../*.** Const
4280: 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72  ants for the lar
4290: 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73  gest and smalles
42a0: 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69  t possible 64-bi
42b0: 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
42c0: 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  s..** These macr
42d0: 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20  os are designed 
42e0: 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c  to work correctl
42f0: 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74  y on both 32-bit
4300: 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63   and 64-bit.** c
4310: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65  ompilers..*/.#de
4320: 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54  fine LARGEST_INT
4330: 36 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c  64  (0xffffffff|
4340: 28 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66  (((i64)0x7ffffff
4350: 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65  f)<<32)).#define
4360: 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20   SMALLEST_INT64 
4370: 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52  (((i64)-1) - LAR
4380: 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 20  GEST_INT64)../* 
4390: 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e  .** Round up a n
43a0: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78  umber to the nex
43b0: 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c  t larger multipl
43c0: 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73  e of 8.  This is
43d0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63   used.** to forc
43e0: 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  e 8-byte alignme
43f0: 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63  nt on 64-bit arc
4400: 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23  hitectures..*/.#
4410: 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29  define ROUND8(x)
4420: 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37       (((x)+7)&~7
4430: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64  )../*.** Round d
4440: 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65  own to the neare
4450: 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38  st multiple of 8
4460: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
4470: 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e  DDOWN8(x) ((x)&~
4480: 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74  7)../*.** Assert
4490: 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65   that the pointe
44a0: 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74  r X is aligned t
44b0: 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e  o an 8-byte boun
44c0: 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d  dary.  This.** m
44d0: 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c  acro is used onl
44e0: 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74 28  y within assert(
44f0: 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  ) to verify that
4500: 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a   the code gets.*
4510: 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20  * all alignment 
4520: 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72  restrictions cor
4530: 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65  rect..**.** Exce
4540: 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f  pt, if SQLITE_4_
4550: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
4560: 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20  LOC is defined, 
4570: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65  then the.** unde
4580: 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20  rlying malloc() 
4590: 69 6d 70 6c 65 6d 65 6e 74 69 6f 6e 20 6d 69 67  implemention mig
45a0: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
45b0: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
45c0: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
45d0: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
45e0: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
45f0: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
4600: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
4610: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
4620: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
4630: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
4640: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
4650: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
4660: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4670: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
4680: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
4690: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
46a0: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
46b0: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
46c0: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
46d0: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
46e0: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
46f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
4700: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
4710: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
4720: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
4730: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4740: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4750: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
4760: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
4770: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
4780: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
4790: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
47a0: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
47b0: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
47c0: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
47d0: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
47e0: 6e 61 6c 73 2e 68 3e 0a 23 20 69 66 20 54 41 52  nals.h>.# if TAR
47f0: 47 45 54 5f 4f 53 5f 49 50 48 4f 4e 45 0a 23 20  GET_OS_IPHONE.# 
4800: 20 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d    undef SQLITE_M
4810: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 20  AX_MMAP_SIZE.#  
4820: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4830: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
4840: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
4850: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58  fndef SQLITE_MAX
4860: 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20  _MMAP_SIZE.# if 
4870: 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f  defined(__linux_
4880: 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  _) \.  || define
4890: 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c  d(_WIN32) \.  ||
48a0: 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c   (defined(__APPL
48b0: 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28  E__) && defined(
48c0: 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c  __MACH__)) \.  |
48d0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29  | defined(__sun)
48e0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
48f0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4900: 20 30 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20   0x7fff0000  /* 
4910: 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20  2147418112 */.# 
4920: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
4930: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
4940: 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23  SIZE 0.# endif.#
4950: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
4960: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20  AX_MMAP_SIZE_xc 
4970: 31 20 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f  1 /* exclude fro
4980: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4990: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
49a0: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
49b0: 20 69 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20   is zero on all 
49c0: 70 6c 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20  platforms.  Or, 
49d0: 65 76 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72  even if a larger
49e0: 0a 2a 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  .** default MMAP
49f0: 5f 53 49 5a 45 20 69 73 20 73 70 65 63 69 66 69  _SIZE is specifi
4a00: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
4a10: 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68  me, make sure th
4a20: 61 74 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f  at it does.** no
4a30: 74 20 65 78 63 65 65 64 20 74 68 65 20 6d 61 78  t exceed the max
4a40: 69 6d 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a  imum mmap size..
4a50: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4a60: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4a70: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
4a80: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
4a90: 5f 53 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65  _SIZE 0.# define
4aa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4ab0: 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20  MMAP_SIZE_xc 1  
4ac0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
4ad0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
4ae0: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46  f.#if SQLITE_DEF
4af0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53  AULT_MMAP_SIZE>S
4b00: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4b10: 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  IZE.# undef SQLI
4b20: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
4b30: 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51  SIZE.# define SQ
4b40: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
4b50: 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41  P_SIZE SQLITE_MA
4b60: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64  X_MMAP_SIZE.#end
4b70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f  if../*.** Only o
4b80: 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41  ne of SQLITE_ENA
4b90: 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c  BLE_STAT3 or SQL
4ba0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
4bb0: 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e   can be defined.
4bc0: 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20  .** Priority is 
4bd0: 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f  given to SQLITE_
4be0: 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49  ENABLE_STAT4.  I
4bf0: 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65 66  f either are def
4c00: 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65  ined, also.** de
4c10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4c20: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4c30: 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  4.*/.#ifdef SQLI
4c40: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
4c50: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4c60: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
4c70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
4c80: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
4c90: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
4ca0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
4cb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
4cc0: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
4cd0: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
4ce0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4cf0: 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  OR_STAT4.# undef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65  TAT3_OR_STAT4.#e
4d20: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
4d30: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
4d40: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
4d50: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
4d60: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
4d70: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
4d80: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
4d90: 69 74 65 20 68 61 6e 64 6c 65 2e 20 0a 2a 2a 0a  ite handle. .**.
4da0: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75  ** The sqlite.bu
4db0: 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72  syHandler member
4dc0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73   of the sqlite s
4dd0: 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74  truct contains t
4de0: 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62  he busy.** callb
4df0: 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61  ack for the data
4e00: 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63  base handle. Eac
4e10: 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76  h pager opened v
4e20: 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a  ia the sqlite.**
4e30: 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65   handle is passe
4e40: 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73  d a pointer to s
4e50: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
4e60: 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64  r. The busy-hand
4e70: 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20  ler.** callback 
4e80: 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76  is currently inv
4e90: 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77  oked only from w
4ea0: 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a  ithin pager.c..*
4eb0: 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
4ec0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73   BusyHandler Bus
4ed0: 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74  yHandler;.struct
4ee0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20   BusyHandler {. 
4ef0: 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f   int (*xFunc)(vo
4f00: 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54  id *,int);  /* T
4f10: 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  he busy callback
4f20: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67   */.  void *pArg
4f30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4f40: 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f   /* First arg to
4f50: 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a   busy callback *
4f60: 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20  /.  int nBusy;  
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4f80: 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69  * Incremented wi
4f90: 74 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c  th each busy cal
4fa0: 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e  l */.};../*.** N
4fb0: 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  ame of the maste
4fc0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
4fd0: 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61  .  The master da
4fe0: 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20  tabase table.** 
4ff0: 69 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62  is a special tab
5000: 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  le that holds th
5010: 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72  e names and attr
5020: 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a  ibutes of all.**
5030: 20 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64   user tables and
5040: 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65   indices..*/.#de
5050: 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45  fine MASTER_NAME
5060: 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d         "sqlite_m
5070: 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54  aster".#define T
5080: 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20  EMP_MASTER_NAME 
5090: 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61   "sqlite_temp_ma
50a0: 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ster"../*.** The
50b0: 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
50c0: 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73  e master databas
50d0: 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66  e table..*/.#def
50e0: 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20  ine MASTER_ROOT 
50f0: 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
5100: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73  he name of the s
5110: 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a  chema table..*/.
5120: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54  #define SCHEMA_T
5130: 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54  ABLE(x)  ((!OMIT
5140: 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29  _TEMPDB)&&(x==1)
5150: 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d  ?TEMP_MASTER_NAM
5160: 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a  E:MASTER_NAME)..
5170: 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65  /*.** A convenie
5180: 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72  nce macro that r
5190: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
51a0: 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
51b0: 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f  .** an array..*/
51c0: 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69  .#define ArraySi
51d0: 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28  ze(X)    ((int)(
51e0: 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66  sizeof(X)/sizeof
51f0: 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20  (X[0])))../*.** 
5200: 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65  Determine if the
5210: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70   argument is a p
5220: 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23  ower of two.*/.#
5230: 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66  define IsPowerOf
5240: 54 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58  Two(X) (((X)&((X
5250: 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  )-1))==0)../*.**
5260: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
5270: 61 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75  alue as a destru
5280: 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73  ctor means to us
5290: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
52a0: 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65  )..** The sqlite
52b0: 33 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e  3DbFree() routin
52c0: 65 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70  e requires two p
52d0: 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61  arameters instea
52e0: 64 20 6f 66 20 74 68 65 20 0a 2a 2a 20 6f 6e 65  d of the .** one
52f0: 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74 20   parameter that 
5300: 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d  destructors norm
5310: 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77  ally want.  So w
5320: 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64  e have to introd
5330: 75 63 65 20 0a 2a 2a 20 74 68 69 73 20 6d 61 67  uce .** this mag
5340: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
5350: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
5360: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
5370: 6c 79 2e 20 20 41 6e 79 20 0a 2a 2a 20 70 6f 69  ly.  Any .** poi
5380: 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68  nter will work h
5390: 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69  ere as long as i
53a0: 74 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72  t is distinct fr
53b0: 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  om SQLITE_STATIC
53c0: 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54  .** and SQLITE_T
53d0: 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65  RANSIENT..*/.#de
53e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41  fine SQLITE_DYNA
53f0: 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f  MIC   ((sqlite3_
5400: 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29  destructor_type)
5410: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a  sqlite3MallocSiz
5420: 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53  e)../*.** When S
5430: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69  QLITE_OMIT_WSD i
5440: 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65  s defined, it me
5450: 61 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72  ans that the tar
5460: 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65  get platform doe
5470: 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74  s.** not support
5480: 20 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63   Writable Static
5490: 20 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68   Data (WSD) such
54a0: 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73   as global and s
54b0: 74 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e  tatic variables.
54c0: 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65  .** All variable
54d0: 73 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65  s must either be
54e0: 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72   on the stack or
54f0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
5500: 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74  ocated from.** t
5510: 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57  he heap.  When W
5520: 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65  SD is unsupporte
5530: 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  d, the variable 
5540: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61  declarations sca
5550: 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67  ttered.** throug
5560: 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20  hout the SQLite 
5570: 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65  code must become
5580: 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65   constants inste
5590: 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f  ad.  The SQLITE_
55a0: 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20  WSD.** macro is 
55b0: 75 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75  used for this pu
55c0: 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74  rpose.  And inst
55d0: 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69  ead of referenci
55e0: 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a  ng the variable.
55f0: 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20  ** directly, we 
5600: 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74  use its constant
5610: 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f   as a key to loo
5620: 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65  kup the run-time
5630: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75   allocated.** bu
5640: 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ffer that holds 
5650: 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20  real variable.  
5660: 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20  The constant is 
5670: 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  also the initial
5680: 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20  izer.** for the 
5690: 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74  run-time allocat
56a0: 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a  ed buffer..**.**
56b0: 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61   In the usual ca
56c0: 73 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20  se where WSD is 
56d0: 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53  supported, the S
56e0: 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c  QLITE_WSD and GL
56f0: 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62  OBAL.** macros b
5700: 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64  ecome no-ops and
5710: 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f   have zero perfo
5720: 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a  rmance impact..*
5730: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5740: 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69  OMIT_WSD.  #defi
5750: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f  ne SQLITE_WSD co
5760: 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  nst.  #define GL
5770: 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29  OBAL(t,v) (*(t*)
5780: 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64  sqlite3_wsd_find
5790: 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69  ((void*)&(v), si
57a0: 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66  zeof(v))).  #def
57b0: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
57c0: 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73  lConfig GLOBAL(s
57d0: 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
57e0: 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66  fig, sqlite3Conf
57f0: 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  ig).  int sqlite
5800: 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e  3_wsd_init(int N
5810: 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64  , int J);.  void
5820: 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69   *sqlite3_wsd_fi
5830: 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20  nd(void *K, int 
5840: 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  L);.#else.  #def
5850: 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20 0a  ine SQLITE_WSD .
5860: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
5870: 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e  (t,v) v.  #defin
5880: 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  e sqlite3GlobalC
5890: 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
58a0: 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  fig.#endif../*.*
58b0: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
58c0: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
58d0: 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70  to suppress comp
58e0: 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e  iler warnings an
58f0: 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20  d to.** make it 
5900: 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72  clear to human r
5910: 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66 75  eaders when a fu
5920: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
5930: 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79   is deliberately
5940: 20 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64   .** left unused
5950: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
5960: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
5970: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
5980: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
5990: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
59a0: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
59b0: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
59c0: 61 6d 70 6c 65 20 74 68 65 20 0a 2a 2a 20 69 6d  ample the .** im
59d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
59e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
59f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
5a00: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
5a10: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
5a20: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
5a30: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
5a40: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
5a50: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
5a60: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
5a70: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
5a80: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
5a90: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
5aa0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
5ab0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
5ac0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
5ad0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
5ae0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
5af0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
5b00: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
5b10: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
5b20: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
5b30: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
5b40: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
5b50: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
5b60: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
5b70: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
5b80: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
5b90: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
5ba0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
5bb0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
5bc0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
5bd0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
5be0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
5bf0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
5c00: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
5c10: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
5c20: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
5c30: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
5c40: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
5c50: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
5c60: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
5c70: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
5c80: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
5c90: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
5ca0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
5cb0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
5cc0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
5cd0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
5ce0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
5cf0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
5d00: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5d10: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
5d20: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
5d30: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
5d40: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
5d50: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
5d60: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
5d70: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5d80: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
5d90: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5da0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
5db0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
5dc0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
5dd0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
5de0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
5df0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
5e00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
5e10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
5e20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
5e30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
5e40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5e50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
5e60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
5e70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
5e80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
5e90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5ea0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
5eb0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
5ec0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
5ed0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
5ee0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
5ef0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
5f00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
5f10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
5f20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
5f30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5f40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
5f50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
5f60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
5f70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
5f80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
5f90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
5fa0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
5fb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
5fc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
5fd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
5fe0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
5ff0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
6000: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
6010: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
6020: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
6030: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
6040: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
6050: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
6060: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
6070: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
6080: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
6090: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
60a0: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
60b0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
60c0: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
60d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
60e0: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
60f0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
6100: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
6110: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
6120: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
6130: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
6140: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
6150: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
6160: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
6170: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
6180: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
6190: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
61a0: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
61b0: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
61c0: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
61d0: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
61e0: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
61f0: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
6200: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
6210: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
6220: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
6230: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
6240: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
6250: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
6260: 72 65 49 6e 66 6f 3b 0a 0a 2f 2a 0a 2a 2a 20 44  reInfo;../*.** D
6270: 65 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64  efer sourcing vd
6280: 62 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68  be.h and btree.h
6290: 20 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65   until after the
62a0: 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a 20 22 42   "u8" and .** "B
62b0: 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65  usyHandler" type
62c0: 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73  defs. vdbe.h als
62d0: 6f 20 72 65 71 75 69 72 65 73 20 61 20 66 65 77  o requires a few
62e0: 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a   of the opaque.*
62f0: 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20  * pointer types 
6300: 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64  (i.e. FuncDef) d
6310: 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f  efined above..*/
6320: 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  .#include "btree
6330: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64  .h".#include "vd
6340: 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  be.h".#include "
6350: 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64  pager.h".#includ
6360: 65 20 22 70 63 61 63 68 65 2e 68 22 0a 0a 23 69  e "pcache.h"..#i
6370: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
6380: 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68 22  nclude "mutex.h"
6390: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
63a0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
63b0: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
63c0: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
63d0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
63e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
63f0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
6400: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
6410: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
6420: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
6430: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
6440: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
6450: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
6460: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
6470: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
6480: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
6490: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
64a0: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
64b0: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
64c0: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
64d0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
64e0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
64f0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
6500: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
6510: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
6520: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
6530: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
6540: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
6550: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
6560: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
6570: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
6580: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
6590: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
65a0: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
65b0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
65c0: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
65d0: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
65e0: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
65f0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
6600: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6610: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
6620: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
6630: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
6640: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
6650: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
6660: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
6670: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
6680: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
6690: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
66a0: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
66b0: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
66c0: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
66d0: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
66e0: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
66f0: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
6700: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
6710: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
6720: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
6730: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
6740: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
6750: 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62  ** .** Schema ob
6760: 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61  jects are automa
6770: 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61  tically dealloca
6780: 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73  ted when the las
6790: 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20  t Btree that.** 
67a0: 72 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20  references them 
67b0: 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20  is destroyed.   
67c0: 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20  The TEMP Schema 
67d0: 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65  is manually free
67e0: 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  d by.** sqlite3_
67f0: 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20  close()..*.** A 
6800: 74 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68  thread must be h
6810: 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f  olding a mutex o
6820: 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
6830: 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64  ing Btree in ord
6840: 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20  er.** to access 
6850: 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20  Schema content. 
6860: 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68   This implies th
6870: 61 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75  at the thread mu
6880: 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f  st also be.** ho
6890: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
68a0: 20 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e   the sqlite3 con
68b0: 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  nection pointer 
68c0: 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74  that owns the Bt
68d0: 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45  ree..** For a TE
68e0: 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20  MP Schema, only 
68f0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  the connection m
6900: 75 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64  utex is required
6910: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65  ..*/.struct Sche
6920: 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d  ma {.  int schem
6930: 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44  a_cookie;   /* D
6940: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76  atabase schema v
6950: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
6960: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
6970: 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e   int iGeneration
6980: 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74  ;     /* Generat
6990: 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e  ion counter.  In
69a0: 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65  cremented with e
69b0: 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20  ach change */.  
69c0: 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20  Hash tblHash;   
69d0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c       /* All tabl
69e0: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
69f0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78  me */.  Hash idx
6a00: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
6a10: 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69  All (named) indi
6a20: 63 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ces indexed by n
6a30: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72  ame */.  Hash tr
6a40: 69 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  igHash;       /*
6a50: 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e   All triggers in
6a60: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
6a70: 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68  .  Hash fkeyHash
6a80: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66  ;       /* All f
6a90: 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72  oreign keys by r
6aa0: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
6ab0: 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  name */.  Table 
6ac0: 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f  *pSeqTab;      /
6ad0: 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71  * The sqlite_seq
6ae0: 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64  uence table used
6af0: 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   by AUTOINCREMEN
6b00: 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66  T */.  u8 file_f
6b10: 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53  ormat;      /* S
6b20: 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72  chema format ver
6b30: 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69  sion for this fi
6b40: 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  le */.  u8 enc; 
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6b60: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73  Text encoding us
6b70: 65 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62  ed by this datab
6b80: 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ase */.  u16 fla
6b90: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  gs;           /*
6ba0: 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   Flags associate
6bb0: 64 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65  d with this sche
6bc0: 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68  ma */.  int cach
6bd0: 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20  e_size;      /* 
6be0: 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
6bf0: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61  to use in the ca
6c00: 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  che */.};../*.**
6c10: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
6c20: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
6c30: 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
6c40: 20 62 69 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a   bits in the .**
6c50: 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   Db.pSchema->fla
6c60: 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
6c70: 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72  fine DbHasProper
6c80: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28  ty(D,I,P)     ((
6c90: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
6ca0: 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  ema->flags&(P))=
6cb0: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
6cc0: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
6cd0: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
6ce0: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6cf0: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
6d00: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
6d10: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
6d20: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6d30: 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64  a->flags|=(P).#d
6d40: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
6d50: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
6d60: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
6d70: 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a  ma->flags&=~(P).
6d80: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
6d90: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
6da0: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
6db0: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
6dc0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
6dd0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
6de0: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
6df0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
6e00: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
6e10: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
6e20: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
6e30: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
6e40: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
6e50: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
6e60: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
6e70: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
6e80: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
6e90: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
6ea0: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
6eb0: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
6ec0: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
6ed0: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
6ee0: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
6ef0: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
6f00: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
6f10: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
6f20: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
6f30: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
6f40: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
6f50: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
6f60: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
6f70: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
6f80: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
6f90: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
6fa0: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
6fb0: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
6fc0: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
6fd0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
6fe0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
6ff0: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
7000: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
7010: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
7020: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
7030: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
7040: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
7050: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
7060: 47 47 45 52 5f 44 45 50 54 48 2b 31 29 0a 0a 2f  GGER_DEPTH+1)../
7070: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
7080: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
7090: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
70a0: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
70b0: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
70c0: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
70d0: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
70e0: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
70f0: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
7100: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
7110: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
7120: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
7130: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
7140: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
7150: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
7160: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
7170: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
7180: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
7190: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
71a0: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
71b0: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
71c0: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
71d0: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
71e0: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
71f0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
7200: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
7210: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
7220: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
7230: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
7240: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
7250: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
7260: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
7270: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
7280: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
7290: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
72a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
72b0: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
72c0: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
72d0: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
72e0: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
72f0: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
7300: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
7310: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
7320: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
7330: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
7340: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
7350: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
7360: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
7370: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
7380: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
7390: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
73a0: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
73b0: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
73c0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
73d0: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
73e0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
73f0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
7400: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
7410: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
7420: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
7430: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
7440: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
7450: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
7460: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
7470: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
7480: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 31  Lookaside {.  u1
7490: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
74a0: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
74b0: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
74c0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 45  bytes */.  u8 bE
74d0: 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20  nabled;         
74e0: 20 20 20 2f 2a 20 46 61 6c 73 65 20 74 6f 20 64     /* False to d
74f0: 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f 6f 6b 61  isable new looka
7500: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7510: 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63   */.  u8 bMalloc
7520: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
7530: 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74 20   True if pStart 
7540: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
7550: 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a  lite3_malloc() *
7560: 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20  /.  int nOut;   
7570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
7580: 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72 73  umber of buffers
7590: 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b   currently check
75a0: 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  ed out */.  int 
75b0: 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20  mxOut;          
75c0: 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65 72      /* Highwater
75d0: 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a   mark for nOut *
75e0: 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b 33  /.  int anStat[3
75f0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30  ];          /* 0
7600: 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a 65  : hits.  1: size
7610: 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75 6c   misses.  2: ful
7620: 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f  l misses */.  Lo
7630: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46 72  okasideSlot *pFr
7640: 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ee;   /* List of
7650: 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66 65   available buffe
7660: 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  rs */.  void *pS
7670: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
7680: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f 66  /* First byte of
7690: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
76a0: 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69  y space */.  voi
76b0: 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  d *pEnd;        
76c0: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
76d0: 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20 61  te past end of a
76e0: 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20 2a  vailable space *
76f0: 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b  /.};.struct Look
7700: 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f  asideSlot {.  Lo
7710: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65  okasideSlot *pNe
7720: 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 62  xt;    /* Next b
7730: 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69 73  uffer in the lis
7740: 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65 72  t of free buffer
7750: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  s */.};../*.** A
7760: 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   hash table for 
7770: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
7780: 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48 61 73 68  ions..**.** Hash
7790: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
77a0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
77b0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
77c0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
77d0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
77e0: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
77f0: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
7800: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
7810: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
7820: 61 5b 32 33 5d 3b 20 20 20 20 20 20 20 2f 2a 20  a[23];       /* 
7830: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
7840: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
7850: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
7860: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  ase connection i
7870: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
7880: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7890: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
78a0: 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20  uct sqlite3 {.  
78b0: 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66  sqlite3_vfs *pVf
78c0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  s;            /*
78d0: 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f   OS Interface */
78e0: 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a  .  struct Vdbe *
78f0: 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20  pVdbe;          
7900: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
7910: 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ve virtual machi
7920: 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  nes */.  CollSeq
7930: 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20   *pDfltColl;    
7940: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
7950: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20  fault collating 
7960: 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59  sequence (BINARY
7970: 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  ) */.  sqlite3_m
7980: 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20  utex *mutex;    
7990: 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69       /* Connecti
79a0: 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62  on mutex */.  Db
79b0: 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20   *aDb;          
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
79d0: 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  ll backends */. 
79e0: 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20   int nDb;       
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7a00: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b  * Number of back
7a10: 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69  ends currently i
7a20: 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66  n use */.  int f
7a30: 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
7a40: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63           /* Misc
7a50: 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e  ellaneous flags.
7a60: 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
7a70: 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20  i64 lastRowid;  
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7a90: 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72   ROWID of most r
7aa0: 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65  ecent insert (se
7ab0: 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36  e above) */.  i6
7ac0: 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
7ae0: 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65  efault mmap_size
7af0: 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e   setting */.  un
7b00: 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46  signed int openF
7b10: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46  lags;       /* F
7b20: 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73  lags passed to s
7b30: 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e  qlite3_vfs.xOpen
7b40: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43  () */.  int errC
7b50: 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
7b60: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
7b70: 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20  cent error code 
7b80: 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20  (SQLITE_*) */.  
7b90: 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20  int errMask;    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7bb0: 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20   & result codes 
7bc0: 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65  with this before
7bd0: 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20   returning */.  
7be0: 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b 20  u16 dbOptFlags; 
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7c00: 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c 65   Flags to enable
7c10: 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a  /disable optimiz
7c20: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 61  ations */.  u8 a
7c30: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
7c40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7c50: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
7c60: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
7c70: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
7c80: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
7c90: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
7ca0: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
7cb0: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
7cc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
7cd0: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
7ce0: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
7cf0: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
7d00: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
7d10: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7d20: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
7d30: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
7d40: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
7d50: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
7d60: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
7d70: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
7d80: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
7d90: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
7da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
7db0: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
7dc0: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
7dd0: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
7de0: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
7df0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
7e00: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
7e10: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
7e20: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
7e30: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
7e40: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
7e50: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
7e60: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
7e70: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
7e80: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
7e90: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
7ea0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
7eb0: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
7ec0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7ed0: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
7ee0: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
7ef0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
7f00: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
7f30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
7f40: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7f50: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
7f70: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
7f80: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
7f90: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
7fa0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
7fb0: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
7fc0: 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74 72 75 63  imits */.  struc
7fd0: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
7fe0: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
7ff0: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
8000: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
8010: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
8020: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
8030: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
8040: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
8050: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
8060: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8080: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
8090: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
80a0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
80b0: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
80c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
80d0: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
80e0: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
80f0: 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67    u8 orphanTrigg
8100: 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  er;           /*
8110: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
8120: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
8130: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 7d 20   trigger */.  } 
8140: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
8150: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
8160: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8170: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
8180: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
8190: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
81b0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
81c0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
81d0: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
81e0: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8200: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
8210: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
8220: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
8230: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8250: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
8260: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
8270: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
8280: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
8290: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
82a0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
82b0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
82c0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
82e0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
82f0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
8300: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54 72 61 63  /.  void (*xTrac
8310: 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63  e)(void*,const c
8320: 68 61 72 2a 29 3b 20 20 20 20 20 20 20 20 2f 2a  har*);        /*
8330: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
8340: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
8350: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8370: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
8380: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
8390: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
83a0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
83b0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
83c0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
83d0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
83e0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8410: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
8420: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8430: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
8440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8450: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
8460: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  itCallback() */ 
8470: 20 20 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d    .  int (*xComm
8480: 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  itCallback)(void
8490: 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65  *);    /* Invoke
84a0: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
84b0: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52  t. */.  void *pR
84c0: 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20  ollbackArg;     
84d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
84e0: 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61  ument to xRollba
84f0: 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 20  ckCallback() */ 
8500: 20 20 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c    .  void (*xRol
8510: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76  lbackCallback)(v
8520: 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65  oid*); /* Invoke
8530: 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69  d at every commi
8540: 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  t. */.  void *pU
8550: 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64  pdateArg;.  void
8560: 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61   (*xUpdateCallba
8570: 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  ck)(void*,int, c
8580: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8590: 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e   char*,sqlite_in
85a0: 74 36 34 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  t64);.#ifndef SQ
85b0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
85c0: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
85d0: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
85e0: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
85f0: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
8600: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
8610: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
8620: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
8630: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
8640: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
8650: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
8660: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
8670: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
8680: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
8690: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
86a0: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
86b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
86c0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
86d0: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
86e0: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
86f0: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
8700: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
8710: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
8720: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
8730: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
8740: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
8750: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
8760: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
8770: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
8780: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
8790: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
87a0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
87b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
87c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
87d0: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
87e0: 0a 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28  .  int (*xAuth)(
87f0: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
8800: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
8810: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  *,const char*,co
8820: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
8850: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
8860: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
8870: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
8880: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
8890: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
88a0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
88b0: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
88c0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
88d0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
88e0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
88f0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
8900: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
8910: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
8920: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
8930: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
8940: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8950: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
8960: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
8970: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
8980: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
8990: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
89a0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
89b0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
89c0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
89d0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
89e0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
89f0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
8a00: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
8a10: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
8a20: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
8a30: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
8a40: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
8a50: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
8a60: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
8a70: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
8a80: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
8a90: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
8aa0: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
8ab0: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
8ac0: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
8ad0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
8ae0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
8af0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
8b00: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
8b10: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
8b20: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
8b30: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
8b40: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
8b50: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75  ) */.#endif.  Fu
8b60: 6e 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b  ncDefHash aFunc;
8b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
8b80: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
8b90: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
8ba0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
8bb0: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
8bc0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
8bd0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
8be0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
8bf0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
8c00: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
8c10: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
8c20: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
8c30: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
8c40: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
8c50: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
8c60: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
8c70: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
8c80: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
8c90: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
8ca0: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
8cb0: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
8cc0: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
8cd0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
8ce0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
8cf0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
8d00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8d10: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
8d20: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
8d30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
8d40: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
8d50: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8d60: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
8d70: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
8d80: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
8d90: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
8da0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
8db0: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
8dc0: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
8dd0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
8de0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
8df0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
8e00: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
8e10: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
8e20: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
8e30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
8e40: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
8e50: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
8e60: 62 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64  bFree() */..#ifd
8e70: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
8e80: 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
8e90: 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
8ea0: 67 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  g variables are 
8eb0: 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79  all protected by
8ec0: 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54   the STATIC_MAST
8ed0: 45 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20  ER .  ** mutex, 
8ee0: 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d  not by sqlite3.m
8ef0: 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75  utex. They are u
8f00: 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e  sed by code in n
8f10: 6f 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20  otify.c. .  **. 
8f20: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
8f30: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
8f40: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
8f50: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
8f60: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
8f70: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
8f80: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
8f90: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
8fa0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
8fb0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
8fc0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
8fd0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
8fe0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
8ff0: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
9000: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
9010: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
9020: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
9030: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
9040: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
9050: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
9060: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
9070: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
9080: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
9090: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
90a0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
90b0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
90c0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
90d0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
90e0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
90f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
9100: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
9110: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
9120: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
9130: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
9140: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
9150: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
9160: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
9170: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
9180: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
9190: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
91a0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
91b0: 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20  dif.};../*.** A 
91c0: 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65  macro to discove
91d0: 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  r the encoding o
91e0: 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f  f a database..*/
91f0: 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29  .#define ENC(db)
9200: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
9210: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a  Schema->enc)../*
9220: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
9230: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
9240: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64  te3.flags..*/.#d
9250: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
9260: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30  eTrace      0x00
9270: 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20  000001  /* True 
9280: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
9290: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
92a0: 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  ne SQLITE_Intern
92b0: 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30  Changes  0x00000
92c0: 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  002  /* Uncommit
92d0: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
92e0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
92f0: 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  e SQLITE_FullFSy
9300: 6e 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30  nc      0x000000
9310: 30 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  04  /* Use full 
9320: 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63  fsync on the bac
9330: 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  kend */.#define 
9340: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
9350: 53 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38  Sync  0x00000008
9360: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
9370: 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69  ync for checkpoi
9380: 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
9390: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
93a0: 20 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20      0x00000010  
93b0: 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70  /* OK to spill p
93c0: 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64  ager cache */.#d
93d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
93e0: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
93f0: 30 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20  000020  /* Show 
9400: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
9410: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
9420: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68  define SQLITE_Sh
9430: 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30  ortColNames  0x0
9440: 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77  0000040  /* Show
9450: 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e   short columns n
9460: 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ames */.#define 
9470: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
9480: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30        0x00000080
9490: 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20    /* Count rows 
94a0: 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52  changed by INSER
94b0: 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  T, */.          
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20  /*   DELETE, or 
94f0: 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72  UPDATE and retur
9500: 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  n */.           
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9530: 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73  *   the count us
9540: 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20  ing a callback. 
9550: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9560: 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20  E_NullCallback  
9570: 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20   0x00000100  /* 
9580: 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62  Invoke the callb
9590: 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20  ack once if the 
95a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
95d0: 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20    result set is 
95e0: 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65  empty */.#define
95f0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
9600: 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30         0x0000020
9610: 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e  0  /* Debug prin
9620: 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63  t SQL as it exec
9630: 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  utes */.#define 
9640: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
9650: 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30  ng    0x00000400
9660: 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69    /* Debug listi
9670: 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67  ngs of VDBE prog
9680: 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rams */.#define 
9690: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
96a0: 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30  ma    0x00000800
96b0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
96c0: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
96d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
96e0: 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65  E_VdbeAddopTrace
96f0: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
9700: 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62  Trace sqlite3Vdb
9710: 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a  eAddOp() calls *
9720: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9730: 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20  _IgnoreChecks   
9740: 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44  0x00002000  /* D
9750: 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68  o not enforce ch
9760: 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
9770: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9780: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
9790: 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20  d 0x0004000  /* 
97a0: 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65  For shared-cache
97b0: 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65   mode */.#define
97c0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
97d0: 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30  leFmt  0x0000800
97e0: 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77  0  /* Create new
97f0: 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f   databases in fo
9800: 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e  rmat 1 */.#defin
9810: 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  e SQLITE_Recover
9820: 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30  yMode   0x000100
9830: 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63  00  /* Ignore sc
9840: 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23  hema errors */.#
9850: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
9860: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
9870: 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65  0020000  /* Reve
9880: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
9890: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
98a0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
98b0: 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30  ers    0x0004000
98c0: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
98d0: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
98e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
98f0: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
9900: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
9910: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
9920: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
9930: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9940: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
9950: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
9960: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
9970: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
9980: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66  fine SQLITE_Pref
9990: 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32  erBuiltin  0x002
99a0: 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72  00000  /* Prefer
99b0: 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e  ence to built-in
99c0: 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e   funcs */.#defin
99d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
99e0: 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30  ension  0x004000
99f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
9a00: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a  ad_extension */.
9a10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
9a20: 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78  nableTrigger  0x
9a30: 30 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75  00800000  /* Tru
9a40: 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67  e to enable trig
9a50: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
9a60: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
9a70: 20 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30        0x01000000
9a80: 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46    /* Defer all F
9a90: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
9aa0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9ab0: 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30  QueryOnly      0
9ac0: 78 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69  x02000000  /* Di
9ad0: 73 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63  sable database c
9ae0: 68 61 6e 67 65 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  hanges */.../*.*
9af0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
9b00: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
9b10: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
9b20: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
9b30: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
9b40: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
9b50: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
9b60: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
9b70: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
9b80: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
9b90: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
9ba0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
9bb0: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
9bc0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
9bd0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
9be0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9bf0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
9c00: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
9c10: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
9c20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
9c30: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
9c40: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
9c50: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
9c60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9c70: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
9c80: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
9c90: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
9ca0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9cb0: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 20  E_IdxRealAsInt  
9cc0: 20 30 78 30 30 31 30 20 20 20 2f 2a 20 53 74 6f   0x0010   /* Sto
9cd0: 72 65 20 52 45 41 4c 20 61 73 20 49 4e 54 20 69  re REAL as INT i
9ce0: 6e 20 69 6e 64 69 63 65 73 20 2a 2f 0a 23 64 65  n indices */.#de
9cf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
9d00: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
9d10: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
9d20: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
9d30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9d40: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
9d50: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
9d60: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
9d70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9d80: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
9d90: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
9da0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
9db0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
9dc0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
9dd0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
9de0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
9df0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
9e00: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
9e10: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
9e20: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
9e30: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
9e40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
9e50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
9e60: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
9e70: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
9e80: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
9e90: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
9ea0: 53 51 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20  SQLITE_Stat3    
9eb0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
9ec0: 2a 20 55 73 65 20 74 68 65 20 53 51 4c 49 54 45  * Use the SQLITE
9ed0: 5f 53 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a  _STAT3 table */.
9ee0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
9ef0: 64 6a 75 73 74 4f 75 74 45 73 74 20 20 20 30 78  djustOutEst   0x
9f00: 31 30 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74  1000   /* Adjust
9f10: 20 6f 75 74 70 75 74 20 65 73 74 69 6d 61 74 65   output estimate
9f20: 73 20 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f  s using WHERE */
9f30: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9f40: 41 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30  AllOpts        0
9f50: 78 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f  xffff   /* All o
9f60: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a  ptimizations */.
9f70: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f  ./*.** Macros fo
9f80: 72 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65  r testing whethe
9f90: 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a  r or not optimiz
9fa0: 61 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c  ations are enabl
9fb0: 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a  ed or disabled..
9fc0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
9fd0: 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
9fe0: 45 53 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  EST.#define Opti
9ff0: 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64  mizationDisabled
a000: 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64  (db, mask)  (((d
a010: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
a020: 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69  mask))!=0).#defi
a030: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45  ne OptimizationE
a040: 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29  nabled(db, mask)
a050: 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74     (((db)->dbOpt
a060: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30  Flags&(mask))==0
a070: 29 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20  ).#else.#define 
a080: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
a090: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
a0a0: 30 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  0.#define Optimi
a0b0: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
a0c0: 2c 20 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64  , mask)   1.#end
a0d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  if../*.** Possib
a0e0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
a0f0: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
a100: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
a110: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
a120: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
a130: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
a140: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
a150: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
a160: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
a170: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
a180: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
a190: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
a1a0: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
a1b0: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
a1c0: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
a1d0: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
a1e0: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
a1f0: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
a200: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
a210: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
a220: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
a230: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
a240: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
a250: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
a260: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
a270: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
a280: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
a290: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a2a0: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
a2b0: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
a2c0: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
a2d0: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
a2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a2f0: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
a300: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
a310: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
a320: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
a330: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
a340: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
a350: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
a360: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
a370: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
a380: 72 65 2e 20 20 41 20 70 6f 69 6e 74 65 72 20 74  re.  A pointer t
a390: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
a3a0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
a3b0: 65 20 73 71 6c 69 74 65 2e 61 46 75 6e 63 0a 2a  e sqlite.aFunc.*
a3c0: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 57  * hash table.  W
a3d0: 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 66 75 6e  hen multiple fun
a3e0: 63 74 69 6f 6e 73 20 68 61 76 65 20 74 68 65 20  ctions have the 
a3f0: 73 61 6d 65 20 6e 61 6d 65 2c 20 74 68 65 20 68  same name, the h
a400: 61 73 68 20 74 61 62 6c 65 0a 2a 2a 20 70 6f 69  ash table.** poi
a410: 6e 74 73 20 74 6f 20 61 20 6c 69 6e 6b 65 64 20  nts to a linked 
a420: 6c 69 73 74 20 6f 66 20 74 68 65 73 65 20 73 74  list of these st
a430: 72 75 63 74 75 72 65 73 2e 0a 2a 2f 0a 73 74 72  ructures..*/.str
a440: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
a450: 69 31 36 20 6e 41 72 67 3b 20 20 20 20 20 20 20  i16 nArg;       
a460: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
a470: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
a480: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
a490: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
a4a0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
a4b0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
a4c0: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
a4d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
a4e0: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
a4f0: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
a500: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a510: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
a520: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
a530: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
a540: 76 6f 69 64 20 28 2a 78 46 75 6e 63 29 28 73 71  void (*xFunc)(sq
a550: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
a560: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
a570: 2a 2a 29 3b 20 2f 2a 20 52 65 67 75 6c 61 72 20  **); /* Regular 
a580: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
a590: 69 64 20 28 2a 78 53 74 65 70 29 28 73 71 6c 69  id (*xStep)(sqli
a5a0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
a5b0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
a5c0: 29 3b 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  ); /* Aggregate 
a5d0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
a5e0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
a5f0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
a600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a610: 20 41 67 67 72 65 67 61 74 65 20 66 69 6e 61 6c   Aggregate final
a620: 69 7a 65 72 20 2a 2f 0a 20 20 63 68 61 72 20 2a  izer */.  char *
a630: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
a640: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
a650: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
a660: 20 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b   FuncDef *pHash;
a670: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69        /* Next wi
a680: 74 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e  th a different n
a690: 61 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65  ame but the same
a6a0: 20 68 61 73 68 20 2a 2f 0a 20 20 46 75 6e 63 44   hash */.  FuncD
a6b0: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
a6c0: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
a6d0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
a6e0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
a6f0: 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  on */.};../*.** 
a700: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
a710: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
a720: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
a730: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
a740: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
a750: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
a760: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
a770: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
a780: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
a790: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
a7a0: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
a7b0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
a7c0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
a7d0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
a7e0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
a7f0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
a800: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
a810: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
a820: 6f 20 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  o .** the number
a830: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
a840: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
a850: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
a860: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
a870: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
a880: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
a890: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
a8a0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
a8b0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
a8c0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
a8d0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
a8e0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
a8f0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
a900: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
a910: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
a920: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
a930: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
a940: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
a950: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
a960: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
a970: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
a980: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
a990: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
a9a0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
a9b0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
a9c0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
a9d0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
a9e0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
a9f0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
aa00: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
aa10: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
aa20: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
aa30: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
aa40: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
aa50: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
aa60: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
aa70: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
aa80: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
aa90: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
aaa0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
aab0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
aac0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
aad0: 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61    There.** are a
aae0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
aaf0: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74  ts in the code t
ab00: 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a  o verify this..*
ab10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ab20: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30  _FUNC_ENCMASK  0
ab30: 78 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  x003 /* SQLITE_U
ab40: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
ab50: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
ab60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ab70: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
ab80: 78 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  x004 /* Candidat
ab90: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
aba0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
abb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
abc0: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
abd0: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
abe0: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
abf0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ac00: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
ac10: 48 45 4d 20 20 20 20 30 78 30 31 30 20 2f 2a 20  HEM    0x010 /* 
ac20: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
ac30: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
ac40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ac50: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
ac60: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
ac70: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
ac80: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 20 2a 2f  ght be called */
ac90: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aca0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
acb0: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
acc0: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
acd0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
ace0: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
acf0: 20 20 30 78 30 38 30 20 2f 2a 20 42 75 69 6c 74    0x080 /* Built
ad00: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
ad10: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
ad20: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
ad30: 4e 54 20 20 20 20 30 78 31 30 30 20 2f 2a 20 42  NT    0x100 /* B
ad40: 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29  uilt-in count(*)
ad50: 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64   aggregate */.#d
ad60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ad70: 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 32 30 30  C_COALESCE 0x200
ad80: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
ad90: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
ada0: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
adb0: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
adc0: 45 4c 59 20 30 78 34 30 30 20 2f 2a 20 42 75 69  ELY 0x400 /* Bui
add0: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
ade0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
adf0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ae00: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
ae10: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
ae20: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
ae30: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
ae40: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
ae50: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
ae60: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
ae70: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
ae80: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
ae90: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
aea0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
aeb0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
aec0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
aed0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
aee0: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
aef0: 20 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65   .**     impleme
af00: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
af10: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
af20: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
af30: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
af40: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
af50: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
af60: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
af70: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
af80: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
af90: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
afa0: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
afb0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
afc0: 20 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e   .**     argumen
afd0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
afe0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
aff0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
b000: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
b010: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
b020: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
b030: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
b040: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
b050: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
b060: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
b070: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
b080: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
b090: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
b0a0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
b0b0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
b0c0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
b0d0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
b0e0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
b0f0: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
b100: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
b110: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
b120: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
b130: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
b140: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
b150: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
b160: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
b170: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b180: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
b190: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
b1a0: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
b1b0: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
b1c0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
b1d0: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
b1e0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
b1f0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
b200: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
b210: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
b220: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
b230: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
b240: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
b250: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
b260: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
b270: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
b280: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
b290: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
b2a0: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
b2b0: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
b2c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
b2d0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
b2e0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
b2f0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
b300: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
b310: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
b320: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
b330: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
b340: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
b350: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20  , 0, #zName, 0, 
b360: 30 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54  0}.#define FUNCT
b370: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
b380: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
b390: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
b3a0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
b3b0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
b3c0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
b3d0: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
b3e0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
b3f0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
b400: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
b410: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
b420: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
b430: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
b440: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
b450: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
b460: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
b470: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
b480: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
b490: 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61  Func, 0, 0, #zNa
b4a0: 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e  me, 0, 0}.#defin
b4b0: 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65  e LIKEFUNC(zName
b4c0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61  , nArg, arg, fla
b4d0: 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
b4e0: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
b4f0: 2c 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30  , (void *)arg, 0
b500: 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 30  , likeFunc, 0, 0
b510: 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a  , #zName, 0, 0}.
b520: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
b530: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
b540: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
b550: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
b560: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
b570: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
b580: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
b590: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
b5a0: 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74 65  arg), 0, 0, xSte
b5b0: 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
b5c0: 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20  0,0}../*.** All 
b5d0: 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e  current savepoin
b5e0: 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
b5f0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73   a linked list s
b600: 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71  tarting at.** sq
b610: 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74  lite3.pSavepoint
b620: 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
b630: 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ent in the list 
b640: 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  is the most rece
b650: 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73  ntly.** opened s
b660: 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f  avepoint. Savepo
b670: 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74  ints are added t
b680: 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68  o the list by th
b690: 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76  e vdbe.** OP_Sav
b6a0: 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
b6b0: 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61  on..*/.struct Sa
b6c0: 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72  vepoint {.  char
b6d0: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d  /* Savepoint nam
b700: 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  e (nul-terminate
b710: 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  d) */.  i64 nDef
b720: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
b730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b740: 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
b750: 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20  d fk violations 
b760: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
b770: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
b780: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
b790: 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69  er of deferred i
b7a0: 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65  mm fk. */.  Save
b7b0: 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20  point *pNext;   
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f  /* Parent savepo
b7e0: 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a  int (if any) */.
b7f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
b800: 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64  llowing are used
b810: 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70   as the second p
b820: 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
b830: 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a  te3Savepoint(),.
b840: 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31  ** and as the P1
b850: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
b860: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
b870: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64  struction..*/.#d
b880: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
b890: 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65  BEGIN      0.#de
b8a0: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
b8b0: 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66  ELEASE    1.#def
b8c0: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f  ine SAVEPOINT_RO
b8d0: 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a  LLBACK   2.../*.
b8e0: 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d  ** Each SQLite m
b8f0: 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74  odule (virtual t
b900: 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29  able definition)
b910: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
b920: 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  n.** instance of
b930: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
b940: 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64  tructure, stored
b950: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e   in the sqlite3.
b960: 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20  aModule.** hash 
b970: 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  table..*/.struct
b980: 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73   Module {.  cons
b990: 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
b9a0: 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20   *pModule;      
b9b0: 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69   /* Callback poi
b9c0: 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74  nters */.  const
b9d0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74  /* Name passed t
ba00: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
ba10: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  ) */.  void *pAu
ba20: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70              /* p
ba40: 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72  Aux passed to cr
ba50: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
ba60: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
ba70: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  oy)(void *);    
ba80: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c          /* Modul
ba90: 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e  e destructor fun
baa0: 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ction */.};../*.
bab0: 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
bac0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
bad0: 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
bae0: 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
baf0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
bb00: 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
bb10: 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
bb20: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
bb30: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
bb40: 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  his column */.  
bb50: 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
bb60: 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
bb70: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
bb80: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66 6c   */.  char *zDfl
bb90: 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e  t;     /* Origin
bba0: 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 64  al text of the d
bbb0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
bbc0: 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20    char *zType;  
bbd0: 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65 20     /* Data type 
bbe0: 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20  for this column 
bbf0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
bc00: 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
bc10: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
bc20: 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
bc30: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
bc40: 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
bc50: 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
bc60: 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
bc70: 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
bc80: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
bc90: 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
bca0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
bcb0: 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
bcc0: 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
bcd0: 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
bce0: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   of this column.
bcf0: 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75 38    INT==1 */.  u8
bd00: 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
bd10: 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
bd20: 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
bd30: 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
bd40: 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
bd50: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
bd60: 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
bd70: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
bd80: 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
bd90: 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
bda0: 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
bdb0: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
bdc0: 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
bdd0: 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
bde0: 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
bdf0: 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
be00: 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   table */../*.**
be10: 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
be20: 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
be30: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
be40: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
be50: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
be60: 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
be70: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
be80: 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
be90: 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
bea0: 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
beb0: 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
bec0: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
bed0: 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
bee0: 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
bef0: 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
bf00: 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
bf10: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
bf20: 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
bf30: 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
bf40: 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
bf50: 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
bf60: 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
bf70: 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
bf80: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
bf90: 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
bfa0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
bfb0: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
bfc0: 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
bfd0: 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
bfe0: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
bff0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
c000: 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
c010: 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
c020: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
c030: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
c040: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
c050: 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
c060: 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
c070: 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
c080: 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
c090: 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
c0a0: 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
c0b0: 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
c0c0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
c0d0: 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
c0e0: 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
c0f0: 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
c100: 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
c110: 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
c120: 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
c130: 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
c140: 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
c150: 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
c160: 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
c170: 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
c180: 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
c190: 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
c1a0: 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
c1b0: 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
c1c0: 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
c1d0: 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
c1e0: 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
c1f0: 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
c200: 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
c210: 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
c220: 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
c230: 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
c240: 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
c250: 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 20   consecutively. 
c260: 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68   .**.** But rath
c270: 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
c280: 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
c290: 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20 54  gin with 'a'.  T
c2a0: 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
c2b0: 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
c2c0: 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
c2d0: 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
c2e0: 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
c2f0: 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
c300: 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
c310: 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
c320: 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
c330: 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
c340: 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
c350: 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
c360: 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
c370: 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
c380: 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
c390: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f 0a   comparison..*/.
c3a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c3b0: 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27 0a  FF_TEXT     'a'.
c3c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c3d0: 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27 0a  FF_NONE     'b'.
c3e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c3f0: 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27 0a  FF_NUMERIC  'c'.
c400: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c410: 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27 0a  FF_INTEGER  'd'.
c420: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
c430: 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27 0a  FF_REAL     'e'.
c440: 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
c450: 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
c460: 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
c470: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
c480: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
c490: 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
c4a0: 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
c4b0: 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
c4c0: 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
c4d0: 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23 64  ty value. .*/.#d
c4e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
c4f0: 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a 0a  _MASK     0x67..
c500: 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
c510: 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
c520: 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
c530: 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
c540: 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
c550: 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
c560: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c570: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
c580: 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x08  /* jumps if
c590: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
c5a0: 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
c5b0: 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
c5c0: 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a 20  2      0x10  /* 
c5d0: 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
c5e0: 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
c5f0: 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
c600: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
c610: 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
c620: 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a 2f   NULL=NULL */../
c630: 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
c640: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
c650: 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
c660: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
c670: 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
c680: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
c690: 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64   .**.** If the d
c6a0: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
c6b0: 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
c6c0: 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
c6d0: 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
c6e0: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
c6f0: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
c700: 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
c710: 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
c720: 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
c730: 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
c740: 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
c750: 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
c760: 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
c770: 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
c780: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
c790: 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
c7a0: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
c7b0: 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a 20  rtual table .** 
c7c0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
c7d0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
c7e0: 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
c7f0: 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 20   shared between 
c800: 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
c810: 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
c820: 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
c830: 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
c840: 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65 6d  tabase .** schem
c850: 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
c860: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
c870: 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
c880: 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
c890: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
c8a0: 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
c8b0: 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
c8c0: 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
c8d0: 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
c8e0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
c8f0: 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
c900: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
c910: 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
c920: 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
c930: 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
c940: 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
c950: 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
c960: 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69 74  l tables .** wit
c970: 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
c980: 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
c990: 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
c9a0: 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a 2a   the callers .**
c9b0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
c9c0: 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65  ese accesses nee
c9d0: 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61  d to be made via
c9e0: 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61   the same databa
c9f0: 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  se .** connectio
ca00: 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
ca10: 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
ca20: 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
ca30: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
ca40: 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
ca50: 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
ca60: 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
ca70: 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
ca80: 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
ca90: 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
caa0: 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
cab0: 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
cac0: 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
cad0: 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
cae0: 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
caf0: 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
cb00: 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
cb10: 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
cb20: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
cb30: 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
cb40: 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
cb50: 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
cb60: 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
cb70: 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
cb80: 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
cb90: 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
cba0: 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
cbb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
cbc0: 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
cbd0: 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
cbe0: 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
cbf0: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
cc00: 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
cc10: 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
cc20: 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
cc30: 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
cc40: 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
cc50: 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
cc60: 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
cc70: 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
cc80: 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
cc90: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
cca0: 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74 65  e not .** delete
ccb0: 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
ccc0: 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
ccd0: 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
cce0: 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d 65  ect()ed .** imme
ccf0: 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
cd00: 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
cd10: 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
cd20: 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
cd30: 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
cd40: 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
cd50: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
cd60: 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
cd70: 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
cd80: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
cd90: 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
cda0: 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
cdb0: 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20 0a  /xDisconnected .
cdc0: 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73  ** next time a s
cdd0: 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70  tatement is prep
cde0: 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20  ared using said 
cdf0: 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69  sqlite3*. This i
ce00: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f  s done.** to avo
ce10: 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75  id deadlock issu
ce20: 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c  es involving mul
ce30: 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75  tiple sqlite3.mu
ce40: 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20  tex mutexes..** 
ce50: 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74  Refer to comment
ce60: 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e  s above function
ce70: 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
ce80: 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a  ckList() for an.
ce90: 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61  ** explanation a
cea0: 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73  s to why it is s
ceb0: 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e  afe to add an en
cec0: 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  try to an sqlite
ced0: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a  3.pDisconnect.**
cee0: 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f   list without ho
cef0: 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73  lding the corres
cf00: 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e  ponding sqlite3.
cf10: 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a  mutex mutex..**.
cf20: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f  ** The memory fo
cf30: 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69  r objects of thi
cf40: 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73  s type is always
cf50: 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a 2a   allocated by .*
cf60: 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
cf70: 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
cf80: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
cf90: 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
cfa0: 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65 20  e.db as .** the 
cfb0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
cfc0: 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
cfd0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
cfe0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
cff0: 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
d000: 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
d010: 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
d020: 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
d030: 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
d040: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
d050: 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
d060: 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
d070: 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
d080: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
d090: 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
d0a0: 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d0c0: 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
d0d0: 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
d0e0: 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
d0f0: 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
d100: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
d110: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
d120: 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
d130: 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
d140: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
d150: 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
d160: 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
d170: 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
d180: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
d190: 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
d1a0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
d1b0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
d1c0: 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
d1d0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
d1e0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
d1f0: 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 69  f the.** followi
d200: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
d210: 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65 20  .** Table.zName 
d220: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
d230: 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 63  he table.  The c
d240: 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67 69  ase of the origi
d250: 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54 41  nal.** CREATE TA
d260: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69 73  BLE statement is
d270: 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61 73   stored, but cas
d280: 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66 69  e is not signifi
d290: 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d 70  cant for.** comp
d2a0: 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  arisons..**.** T
d2b0: 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68 65  able.nCol is the
d2c0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
d2d0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
d2e0: 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69 73  .  Table.aCol is
d2f0: 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
d300: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f 6c   an array of Col
d310: 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c 20  umn structures, 
d320: 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  one for each col
d330: 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  umn..**.** If th
d340: 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20 49  e table has an I
d350: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
d360: 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e 69  EY, then Table.i
d370: 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64 65  PKey is the inde
d380: 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c 75  x of.** the colu
d390: 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74 20  mn that is that 
d3a0: 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73 65  key.   Otherwise
d3b0: 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20   Table.iPKey is 
d3c0: 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65 0a  negative.  Note.
d3d0: 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
d3e0: 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49 4d  type of the PRIM
d3f0: 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65 20  ARY KEY must be 
d400: 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69 73  INTEGER for this
d410: 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65 20   field to.** be 
d420: 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45 52  set.  An INTEGER
d430: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
d440: 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77 69  used as the rowi
d450: 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f  d for each row o
d460: 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e 20  f.** the table. 
d470: 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73 20   If a table has 
d480: 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  no INTEGER PRIMA
d490: 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20 72  RY KEY, then a r
d4a0: 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20 69  andom rowid.** i
d4b0: 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72 20  s generated for 
d4c0: 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65 20  each row of the 
d4d0: 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50 72  table.  TF_HasPr
d4e0: 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74 20  imaryKey is set 
d4f0: 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  if.** the table 
d500: 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59 20  has any PRIMARY 
d510: 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72 20  KEY, INTEGER or 
d520: 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a 2a  otherwise..**.**
d530: 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20 74   Table.tnum is t
d540: 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66  he page number f
d550: 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72 65  or the root BTre
d560: 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  e page of the ta
d570: 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64 61  ble in the.** da
d580: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49 66  tabase file.  If
d590: 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74 68   Table.iDb is th
d5a0: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
d5b0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
d5c0: 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c 69  ckend.** in sqli
d5d0: 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73 20  te.aDb[].  0 is 
d5e0: 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
d5f0: 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20 66  abase and 1 is f
d600: 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61 74  or the file that
d610: 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f 72  .** holds tempor
d620: 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 69  ary tables and i
d630: 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f 45  ndices.  If TF_E
d640: 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74 0a  phemeral is set.
d650: 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  ** then the tabl
d660: 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 61  e is stored in a
d670: 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61 75   file that is au
d680: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c 65  tomatically dele
d690: 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65 20  ted.** when the 
d6a0: 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20 74  VDBE cursor to t
d6b0: 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f 73  he table is clos
d6c0: 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  ed.  In this cas
d6d0: 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a 2a  e Table.tnum .**
d6e0: 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75 72   refers VDBE cur
d6f0: 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74 20  sor number that 
d700: 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65 20  holds the table 
d710: 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68 65  open, not to the
d720: 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e 75   root.** page nu
d730: 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e 74  mber.  Transient
d740: 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65 64   tables are used
d750: 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 73   to hold the res
d760: 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75 62  ults of a.** sub
d770: 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70 65  -query that appe
d780: 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 61  ars instead of a
d790: 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d 65   real table name
d7a0: 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
d7b0: 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45 4c  use .** of a SEL
d7c0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
d7d0: 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
d7e0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
d7f0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
d800: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
d810: 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
d820: 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
d830: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
d840: 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
d850: 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
d860: 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
d870: 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
d880: 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
d890: 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
d8a0: 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
d8b0: 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
d8c0: 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
d8d0: 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
d8e0: 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
d8f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
d900: 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
d910: 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
d920: 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
d930: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
d940: 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
d950: 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
d960: 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
d970: 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  mn */.#ifndef SQ
d980: 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 0a  LITE_OMIT_CHECK.
d990: 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
d9a0: 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
d9b0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
d9c0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f 77  */.#endif.  tRow
d9d0: 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20 20  cnt nRowEst;    
d9e0: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
d9f0: 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
da00: 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
da10: 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 74  table */.  int t
da20: 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
da30: 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e 6f  /* Root BTree no
da40: 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c  de for this tabl
da50: 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f 76  e (see note abov
da60: 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  e) */.  i16 iPKe
da70: 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
da80: 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
da90: 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
daa0: 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79 20   as the primary 
dab0: 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f  key */.  i16 nCo
dac0: 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  l;            /*
dad0: 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
dae0: 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ns in this table
daf0: 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b 20   */.  u16 nRef; 
db00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
db10: 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
db20: 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
db30: 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
db40: 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
db50: 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
db60: 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
db70: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 74 61  bytes */.  u8 ta
db80: 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  bFlags;         
db90: 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20  /* Mask of TF_* 
dba0: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 6b  values */.  u8 k
dbb0: 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
dbc0: 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
dbd0: 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
dbe0: 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
dbf0: 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
dc00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
dc10: 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
dc20: 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
dc30: 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
dc40: 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
dc50: 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
dc60: 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
dc70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dc80: 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
dc90: 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
dca0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
dcb0: 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
dcc0: 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
dcd0: 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
dce0: 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 61  g;  /* Text of a
dcf0: 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e 20  ll module args. 
dd00: 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e 61  [0] is module na
dd10: 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  me */.  VTable *
dd20: 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
dd30: 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
dd40: 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
dd50: 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
dd60: 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
dd70: 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
dd80: 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
dd90: 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
dda0: 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
ddb0: 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
ddc0: 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
ddd0: 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
dde0: 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
ddf0: 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
de00: 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
de10: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
de20: 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 65 2e  values for Tabe.
de30: 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  tabFlags..*/.#de
de40: 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79  fine TF_Readonly
de50: 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
de60: 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
de70: 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
de80: 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
de90: 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20  l       0x02    
dea0: 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20  /* An ephemeral 
deb0: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
dec0: 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65   TF_HasPrimaryKe
ded0: 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54  y   0x04    /* T
dee0: 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61  able has a prima
def0: 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
df00: 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65  e TF_Autoincreme
df10: 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20  nt   0x08    /* 
df20: 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  Integer primary 
df30: 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65  key is autoincre
df40: 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ment */.#define 
df50: 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20 20  TF_Virtual      
df60: 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49 73     0x10    /* Is
df70: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
df80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57   */.#define TF_W
df90: 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30  ithoutRowid    0
dfa0: 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  x20    /* No row
dfb0: 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52 59  id used. PRIMARY
dfc0: 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20   KEY is the key 
dfd0: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
dfe0: 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
dff0: 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
e000: 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
e010: 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
e020: 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
e030: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
e040: 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
e050: 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
e060: 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
e070: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
e080: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
e090: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
e0a0: 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
e0b0: 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
e0c0: 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
e0d0: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
e0e0: 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65 66  tual)!=0).#  def
e0f0: 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
e100: 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
e110: 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
e120: 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 73  HIDDEN)!=0).#els
e130: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
e140: 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
e150: 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
e160: 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
e170: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
e180: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e190: 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
e1a0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e1b0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
e1c0: 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
e1d0: 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
e1e0: 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
e1f0: 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
e200: 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
e210: 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
e220: 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
e230: 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
e240: 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
e250: 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
e260: 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
e270: 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
e280: 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
e290: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
e2a0: 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
e2b0: 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
e2c0: 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
e2d0: 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
e2e0: 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
e2f0: 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
e300: 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
e310: 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
e320: 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
e330: 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
e340: 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
e350: 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
e360: 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
e370: 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
e380: 65 78 32 22 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  ex2"..**.** Each
e390: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
e3a0: 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
e3b0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
e3c0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
e3d0: 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
e3e0: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
e3f0: 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
e400: 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
e410: 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
e420: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
e430: 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
e440: 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
e450: 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
e460: 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2f 0a 73 74  t checked..*/.st
e470: 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61  ruct FKey {.  Ta
e480: 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20  ble *pFrom;     
e490: 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e  /* Table contain
e4a0: 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43  ing the REFERENC
e4b0: 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20  ES clause (aka: 
e4c0: 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79  Child) */.  FKey
e4d0: 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a   *pNextFrom;  /*
e4e0: 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b 65   Next foreign ke
e4f0: 79 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  y in pFrom */.  
e500: 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
e510: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
e520: 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
e530: 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
e540: 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
e550: 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
e560: 2a 20 4e 65 78 74 20 66 6f 72 65 69 67 6e 20 6b  * Next foreign k
e570: 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61 6d 65  ey on table name
e580: 64 20 7a 54 6f 20 2a 2f 0a 20 20 46 4b 65 79 20  d zTo */.  FKey 
e590: 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20  *pPrevTo;    /* 
e5a0: 50 72 65 76 69 6f 75 73 20 66 6f 72 65 69 67 6e  Previous foreign
e5b0: 20 6b 65 79 20 6f 6e 20 74 61 62 6c 65 20 6e 61   key on table na
e5c0: 6d 65 64 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  med zTo */.  int
e5d0: 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
e5e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
e5f0: 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
e600: 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
e610: 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
e620: 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
e630: 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
e640: 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
e650: 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
e660: 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
e670: 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
e680: 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54       /* ON DELET
e690: 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20  E and ON UPDATE 
e6a0: 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74  actions, respect
e6b0: 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67  ively */.  Trigg
e6c0: 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d  er *apTrigger[2]
e6d0: 3b 20 20 2f 2a 20 54 72 69 67 67 65 72 73 20 66  ;  /* Triggers f
e6e0: 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74  or aAction[] act
e6f0: 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
e700: 20 73 43 6f 6c 4d 61 70 20 7b 20 20 2f 2a 20 4d   sColMap {  /* M
e710: 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
e720: 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
e730: 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
e740: 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
e750: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
e760: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
e770: 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
e780: 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  zCol;        /* 
e790: 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  Name of column i
e7a0: 6e 20 7a 54 6f 2e 20 20 49 66 20 30 20 75 73 65  n zTo.  If 0 use
e7b0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
e7c0: 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
e7d0: 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
e7e0: 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
e7f0: 6c 20 63 6f 6c 75 6d 6e 20 73 20 2a 2f 0a 7d 3b  l column s */.};
e800: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73  ../*.** SQLite s
e810: 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66  upports many dif
e820: 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72  ferent ways to r
e830: 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61  esolve a constra
e840: 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52  int.** error.  R
e850: 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69  OLLBACK processi
e860: 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ng means that a 
e870: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
e880: 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74  tion.** causes t
e890: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
e8a0: 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20  process to fail 
e8b0: 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72  and for the curr
e8c0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
e8d0: 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ** to be rolled 
e8e0: 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f  back.  ABORT pro
e8f0: 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
e900: 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
e910: 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20  rocess.** fails 
e920: 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68  and any prior ch
e930: 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20  anges from that 
e940: 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  one operation ar
e950: 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a  e backed out,.**
e960: 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63   but the transac
e970: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c  tion is not roll
e980: 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70  ed back.  FAIL p
e990: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
e9a0: 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72  that.** the oper
e9b0: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
e9c0: 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75  s stops and retu
e9d0: 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64  rns an error cod
e9e0: 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a  e.  But prior.**
e9f0: 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20   changes due to 
ea00: 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
ea10: 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65  on are not backe
ea20: 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c  d out and no rol
ea30: 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e  lback.** occurs.
ea40: 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74    IGNORE means t
ea50: 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c  hat the particul
ea60: 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73  ar row that caus
ea70: 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  ed the constrain
ea80: 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f  t.** error is no
ea90: 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70  t inserted or up
eaa0: 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69  dated.  Processi
eab0: 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
eac0: 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20   no error.** is 
ead0: 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41  returned.  REPLA
eae0: 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72  CE means that pr
eaf0: 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  eexisting databa
eb00: 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75  se rows that cau
eb10: 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20  sed.** a UNIQUE 
eb20: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
eb30: 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64  tion are removed
eb40: 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77   so that the new
eb50: 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70   insert or.** up
eb60: 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64  date can proceed
eb70: 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
eb80: 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
eb90: 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64  rror is reported
eba0: 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54  ..**.** RESTRICT
ebb0: 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43  , SETNULL, and C
ebc0: 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61  ASCADE actions a
ebd0: 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72  pply only to for
ebe0: 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45  eign keys..** RE
ebf0: 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61  STRICT is the sa
ec00: 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20  me as ABORT for 
ec10: 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67  IMMEDIATE foreig
ec20: 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a  n keys and the.*
ec30: 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41  * same as ROLLBA
ec40: 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20  CK for DEFERRED 
ec50: 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d  keys.  SETNULL m
ec60: 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f  eans that the fo
ec70: 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20  reign.** key is 
ec80: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41  set to NULL.  CA
ec90: 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74  SCADE means that
eca0: 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44   a DELETE or UPD
ecb0: 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  ATE of the.** re
ecc0: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72  ferenced table r
ecd0: 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64  ow is propagated
ece0: 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68   into the row th
ecf0: 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20  at holds the.** 
ed00: 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 20  foreign key..** 
ed10: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
ed20: 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
ed30: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
ed40: 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
ed50: 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
ed60: 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
ed70: 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
ed80: 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
ed90: 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
eda0: 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
edb0: 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
edc0: 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
edd0: 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
ede0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
edf0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
ee00: 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
ee10: 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
ee20: 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
ee30: 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
ee40: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
ee50: 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
ee60: 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
ee70: 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
ee80: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
ee90: 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
eea0: 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
eeb0: 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
eec0: 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
eed0: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
eee0: 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
eef0: 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
ef00: 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
ef10: 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
ef20: 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
ef30: 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
ef40: 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
ef50: 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
ef60: 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
ef70: 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
ef80: 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
ef90: 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
efa0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
efb0: 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
efc0: 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
efd0: 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
efe0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
eff0: 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
f000: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
f010: 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
f020: 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
f030: 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
f040: 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
f050: 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
f060: 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
f070: 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
f080: 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
f090: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
f0a0: 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
f0b0: 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
f0c0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
f0d0: 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
f0e0: 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
f0f0: 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a 2a  o control the .*
f100: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20  * comparison of 
f110: 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65  the two index ke
f120: 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ys..**.** Note t
f130: 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d  hat aSortOrder[]
f140: 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76   and aColl[] hav
f150: 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73  e nField+1 slots
f160: 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20  .  There.** are 
f170: 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72  nField slots for
f180: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   the columns of 
f190: 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e  an index then on
f1a0: 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20  e extra slot.** 
f1b0: 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74  for the rowid at
f1c0: 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
f1d0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20  uct KeyInfo {.  
f1e0: 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
f1f0: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
f200: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
f210: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
f220: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
f230: 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f  encoding - one o
f240: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46  f the SQLITE_UTF
f250: 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * values */.  u1
f260: 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
f270: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 69 6e 64    /* Maximum ind
f280: 65 78 20 66 6f 72 20 61 43 6f 6c 6c 5b 5d 20 61  ex for aColl[] a
f290: 6e 64 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  nd aSortOrder[] 
f2a0: 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
f2b0: 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74  der;     /* Sort
f2c0: 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20   order for each 
f2d0: 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c  column. */.  Col
f2e0: 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20  lSeq *aColl[1]; 
f2f0: 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
f300: 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20  quence for each 
f310: 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20  term of the key 
f320: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
f330: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
f340: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
f350: 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
f360: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a  ation about a.**
f370: 20 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65   single index re
f380: 63 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c  cord that has al
f390: 72 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65  ready been parse
f3a0: 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
f3b0: 69 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e  idual.** values.
f3c0: 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
f3d0: 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
f3e0: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
f3f0: 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
f400: 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
f410: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
f420: 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
f430: 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
f440: 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
f450: 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
f460: 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
f470: 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
f480: 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
f490: 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
f4a0: 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
f4b0: 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
f4c0: 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
f4d0: 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
f4e0: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  pcode..**.** Thi
f4f0: 73 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  s structure hold
f500: 73 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  s a record that 
f510: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
f520: 20 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a   disassembled.**
f530: 20 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69   into its consti
f540: 74 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f  tuent fields..*/
f550: 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64  .struct Unpacked
f560: 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e  Record {.  KeyIn
f570: 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f  fo *pKeyInfo;  /
f580: 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20  * Collation and 
f590: 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72  sort-order infor
f5a0: 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20  mation */.  u16 
f5b0: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
f5c0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
f5d0: 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
f5e0: 2a 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20  */.  u8 flags;  
f5f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c           /* Bool
f600: 65 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55  ean settings.  U
f610: 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f  NPACKED_... belo
f620: 77 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  w */.  i64 rowid
f630: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73  ;          /* Us
f640: 65 64 20 62 79 20 55 4e 50 41 43 4b 45 44 5f 50  ed by UNPACKED_P
f650: 52 45 46 49 58 5f 53 45 41 52 43 48 20 2a 2f 0a  REFIX_SEARCH */.
f660: 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
f670: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
f680: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
f690: 6f 77 65 64 20 76 61 6c 75 65 73 20 6f 66 20 55  owed values of U
f6a0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2e 66 6c  npackedRecord.fl
f6b0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55  ags.*/.#define U
f6c0: 4e 50 41 43 4b 45 44 5f 49 4e 43 52 4b 45 59 20  NPACKED_INCRKEY 
f6d0: 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 4d        0x01  /* M
f6e0: 61 6b 65 20 74 68 69 73 20 6b 65 79 20 61 6e 20  ake this key an 
f6f0: 65 70 73 69 6c 6f 6e 20 6c 61 72 67 65 72 20 2a  epsilon larger *
f700: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
f710: 45 44 5f 50 52 45 46 49 58 5f 4d 41 54 43 48 20  ED_PREFIX_MATCH 
f720: 20 30 78 30 32 20 20 2f 2a 20 41 20 70 72 65 66   0x02  /* A pref
f730: 69 78 20 6d 61 74 63 68 20 69 73 20 63 6f 6e 73  ix match is cons
f740: 69 64 65 72 65 64 20 4f 4b 20 2a 2f 0a 23 64 65  idered OK */.#de
f750: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
f760: 45 46 49 58 5f 53 45 41 52 43 48 20 30 78 30 34  EFIX_SEARCH 0x04
f770: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 66 69 6e 61    /* Ignore fina
f780: 6c 20 28 72 6f 77 69 64 29 20 66 69 65 6c 64 20  l (rowid) field 
f790: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
f7a0: 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
f7b0: 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
f7c0: 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
f7d0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
f7e0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
f7f0: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
f800: 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
f810: 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
f820: 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
f830: 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
f840: 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
f850: 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
f860: 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
f870: 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
f880: 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
f890: 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
f8a0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
f8b0: 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
f8c0: 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
f8d0: 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
f8e0: 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
f8f0: 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
f900: 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
f910: 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
f920: 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
f930: 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
f940: 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
f950: 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
f960: 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
f970: 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
f980: 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
f990: 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
f9a0: 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
f9b0: 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
f9c0: 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
f9d0: 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
f9e0: 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
f9f0: 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
fa00: 73 65 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74  se the .** first
fa10: 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
fa20: 64 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61  dexed (c3) has a
fa30: 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20  n index of 2 in 
fa40: 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54  Ex1.aCol[]..** T
fa50: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
fa60: 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28   to be indexed (
fa70: 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78  c1) has an index
fa80: 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e   of 0 in.** Ex1.
fa90: 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78  aCol[], hence Ex
faa0: 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30  2.aiColumn[1]==0
fab0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65  ..**.** The Inde
fac0: 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20  x.onError field 
fad0: 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68  determines wheth
fae0: 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e  er or not the in
faf0: 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a  dexed columns.**
fb00: 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20   must be unique 
fb10: 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69  and what to do i
fb20: 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20  f they are not. 
fb30: 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72   When Index.onEr
fb40: 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20  ror=OE_None,.** 
fb50: 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73  it means this is
fb60: 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e   not a unique in
fb70: 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20  dex.  Otherwise 
fb80: 69 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69  it is a unique i
fb90: 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20  ndex.** and the 
fba0: 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f  value of Index.o
fbb0: 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20  nError indicate 
fbc0: 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69  the which confli
fbd0: 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a  ct resolution .*
fbe0: 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65  * algorithm to e
fbf0: 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61  mploy whenever a
fc00: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
fc10: 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f  e to insert a no
fc20: 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d  n-unique.** elem
fc30: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ent..*/.struct I
fc40: 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a  ndex {.  char *z
fc50: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
fc60: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
fc70: 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
fc80: 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20   *aiColumn;     
fc90: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63        /* Which c
fca0: 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
fcb0: 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20  by this index.  
fcc0: 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52  1st is 0 */.  tR
fcd0: 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
fce0: 20 20 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41         /* From A
fcf0: 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77  NALYZE: Est. row
fd00: 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61  s selected by ea
fd10: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54  ch column */.  T
fd20: 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20  able *pTable;   
fd30: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53          /* The S
fd40: 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  QL table being i
fd50: 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72  ndexed */.  char
fd60: 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
fd70: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
fd80: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
fd90: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
fda0: 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
fdb0: 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
fdc0: 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e    /* The next in
fdd0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
fde0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62  ith the same tab
fdf0: 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  le */.  Schema *
fe00: 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
fe10: 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
fe20: 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78  ining this index
fe30: 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f   */.  u8 *aSortO
fe40: 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
fe50: 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  * for each colum
fe60: 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46  n: True==DESC, F
fe70: 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63  alse==ASC */.  c
fe80: 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20  har **azColl;   
fe90: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79          /* Array
fea0: 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65   of collation se
feb0: 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72  quence names for
fec0: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72   index */.  Expr
fed0: 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b   *pPartIdxWhere;
fee0: 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
fef0: 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c  ause for partial
ff00: 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 69 6e   indices */.  in
ff10: 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
ff20: 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67         /* DB Pag
ff30: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f  e containing roo
ff40: 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20  t of this index 
ff50: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64  */.  LogEst szId
ff60: 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a  xRow;         /*
ff70: 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61   Estimated avera
ff80: 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62  ge row size in b
ff90: 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 43  ytes */.  u16 nC
ffa0: 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
ffb0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ffc0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65  columns in table
ffd0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
ffe0: 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
fff0: 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
10000 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
10010 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
10020 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
10030 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61   */.  unsigned a
10040 75 74 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f  utoIndex:2;    /
10050 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
10060 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
10070 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
10080 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
10090 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
100a0 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
100b0 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
100c0 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
100d0 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
100e0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
100f0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
10100 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
10110 6d 6e 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  mns */.#ifdef SQ
10120 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
10130 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74  3_OR_STAT4.  int
10140 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20   nSample;       
10150 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10160 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61  of elements in a
10170 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e  Sample[] */.  in
10180 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20  t nSampleCol;   
10190 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
101a0 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e  f IndexSample.an
101b0 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a  Eq[] and so on *
101c0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76  /.  tRowcnt *aAv
101d0 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gEq;         /* 
101e0 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
101f0 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20  es for keys not 
10200 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
10210 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
10220 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
10230 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
10240 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64  most key */.#end
10250 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  if.};../*.** Eac
10260 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
10270 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
10280 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
10290 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
102a0 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ry .** using a s
102b0 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
102c0 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
102d0 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
102e0 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
102f0 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
10300 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
10310 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
10320 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
10330 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
10340 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
10350 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
10360 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
10370 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
10380 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
10390 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
103a0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
103b0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
103c0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
103d0 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
103e0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
103f0 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
10400 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
10410 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
10420 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
10430 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
10440 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
10450 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
10460 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
10470 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
10480 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
10490 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
104a0 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
104b0 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
104c0 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
104d0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
104e0 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
104f0 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
10500 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
10510 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
10520 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
10530 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
10540 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
10550 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
10560 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
10570 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
10580 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
10590 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
105a0 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
105b0 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
105c0 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
105d0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
105e0 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
105f0 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
10600 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
10610 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
10620 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
10630 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
10640 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
10650 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
10660 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
10670 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
10680 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
10690 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
106a0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
106b0 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
106c0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
106d0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
106e0 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
106f0 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
10700 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
10710 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
10720 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
10730 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
10740 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
10750 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
10760 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
10770 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
10780 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
10790 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
107a0 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
107b0 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
107c0 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
107d0 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
107e0 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
107f0 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
10800 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
10810 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
10820 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
10830 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
10840 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
10850 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
10860 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
10870 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
10880 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
10890 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
108a0 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
108b0 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
108c0 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
108d0 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
108e0 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
108f0 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
10900 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
10930 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
10940 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
10950 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
10960 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
10970 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
10980 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
10990 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
109a0 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
109b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109c0 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
109d0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
109e0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
109f0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
10a00 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
10a10 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
10a20 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
10a30 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
10a40 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
10a50 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
10a60 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
10a70 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
10a80 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
10a90 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
10aa0 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  dex */.  ExprLis
10ab0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
10ac0 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
10ad0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
10ae0 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
10af0 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
10b00 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
10b10 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
10b20 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
10b30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10b40 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
10b50 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10b70 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
10b80 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
10b90 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
10ba0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
10bb0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
10bc0 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
10bd0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
10be0 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
10bf0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
10c00 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
10c10 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
10c20 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
10c30 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
10c40 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
10c50 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
10c60 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
10c70 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
10c80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10c90 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
10ca0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
10cb0 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
10cc0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
10cd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
10ce0 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
10cf0 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
10d00 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
10d10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10d20 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
10d30 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
10d40 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d60 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
10d70 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
10d80 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
10d90 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
10dc0 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
10dd0 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
10de0 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
10df0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10e00 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
10e10 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
10e20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
10e30 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
10e40 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
10e50 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
10e60 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
10e70 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10e80 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
10e90 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
10ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
10eb0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
10ec0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
10ed0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
10ee0 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
10ef0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
10f00 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
10f10 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
10f20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
10f30 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
10f40 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
10f50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
10f60 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
10f70 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
10f80 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
10f90 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
10fa0 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
10fb0 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
10fc0 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
10fd0 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
10fe0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
10ff0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
11000 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
11010 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
11020 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
11030 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
11040 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
11050 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
11060 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
11070 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
11080 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
11090 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
110a0 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
110b0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
110c0 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
110d0 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
110e0 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
110f0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
11100 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
11110 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
11120 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
11130 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
11140 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
11150 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
11160 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
11170 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
11180 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
11190 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
111a0 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
111b0 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
111c0 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
111d0 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
111e0 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
111f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
11200 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
11210 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
11220 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
11230 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
11240 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
11250 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
11260 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
11270 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
11280 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
11290 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
112a0 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
112b0 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
112c0 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
112d0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
112e0 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
112f0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
11300 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
11310 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
11320 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
11330 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
11340 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
11350 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
11360 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
11370 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
11380 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
11390 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
113a0 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
113b0 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
113c0 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  B, .** or TK_STR
113d0 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
113e0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
113f0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
11400 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
11410 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
11420 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
11430 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
11440 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
11450 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76  ntains the .** v
11460 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
11470 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
11480 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
11490 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
114a0 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
114b0 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
114c0 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
114d0 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
114e0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
114f0 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
11500 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
11510 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
11520 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
11530 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
11540 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
11550 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
11560 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
11570 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
11580 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
11590 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
115a0 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
115b0 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
115c0 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
115d0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
115e0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
115f0 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
11600 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
11610 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
11620 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
11630 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
11640 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
11650 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
11660 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
11670 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
11680 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
11690 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
116a0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
116b0 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
116c0 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
116d0 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
116e0 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a   is .** valid..*
116f0 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
11700 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
11710 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
11720 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
11730 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
11740 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
11750 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
11760 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
11770 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
11780 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
11790 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
117a0 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
117b0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
117c0 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
117d0 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
117e0 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
117f0 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
11800 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
11810 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
11820 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
11830 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
11840 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
11850 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
11860 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
11870 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
11880 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
11890 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
118a0 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
118b0 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
118c0 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
118d0 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
118e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
118f0 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
11900 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
11910 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a  uestion mark .**
11920 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
11930 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
11940 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
11950 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
11960 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d  he index .** num
11970 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72  ber for that var
11980 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  iable..**.** If 
11990 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
119a0 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65  s a subquery the
119b0 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68  n Expr.iColumn h
119c0 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  olds an integer.
119d0 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62  ** register numb
119e0 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  er containing th
119f0 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
11a00 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68  subquery.  If th
11a10 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69  e.** subquery gi
11a20 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ves a constant r
11a30 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62  esult, then iTab
11a40 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68  le is -1.  If th
11a50 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69  e subquery.** gi
11a60 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  ves a different 
11a70 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72  answer at differ
11a80 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ent times during
11a90 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65   statement proce
11aa0 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54  ssing.** then iT
11ab0 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72  able is the addr
11ac0 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74  ess of a subrout
11ad0 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65  ine that compute
11ae0 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a  s the subquery..
11af0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70  **.** If the Exp
11b00 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f  r is of type OP_
11b10 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20  Column, and the 
11b20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65  table it is sele
11b30 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73  cting from.** is
11b40 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72   a disk table or
11b50 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65   the "old.*" pse
11b60 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20  udo-table, then 
11b70 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74  pTab points to t
11b80 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
11b90 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ing table defini
11ba0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f  tion..**.** ALLO
11bb0 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a  CATION NOTES:.**
11bc0 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73  .** Expr objects
11bd0 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f   can use a lot o
11be0 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69  f memory space i
11bf0 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  n database schem
11c00 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72  a.  To.** help r
11c10 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71  educe memory req
11c20 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74  uirements, somet
11c30 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a  imes an Expr obj
11c40 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74  ect will be.** t
11c50 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74  runcated.  And t
11c60 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d  o reduce the num
11c70 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c  ber of memory al
11c80 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74  locations, somet
11c90 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d  imes.** two or m
11ca0 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73  ore Expr objects
11cb0 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
11cc0 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f  in a single memo
11cd0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a  ry allocation,.*
11ce0 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  * together with 
11cf0 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69  Expr.zToken stri
11d00 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ngs..**.** If th
11d10 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64  e EP_Reduced and
11d20 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
11d30 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e  ags are set when
11d40 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  .** an Expr obje
11d50 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e  ct is truncated.
11d60 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65    When EP_Reduce
11d70 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61  d is set, then a
11d80 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20  ll.** the child 
11d90 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20  Expr objects in 
11da0 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61  the Expr.pLeft a
11db0 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73  nd Expr.pRight s
11dc0 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63  ubtrees.** are c
11dd0 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
11de0 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20  the same memory 
11df0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74  allocation.  Not
11e00 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74  e, however, that
11e10 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73  .** the subtrees
11e20 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74   in Expr.x.pList
11e30 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65   or Expr.x.pSele
11e40 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65  ct are always se
11e50 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f  parately.** allo
11e60 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73  cated, regardles
11e70 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20  s of whether or 
11e80 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69  not EP_Reduced i
11e90 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  s set..*/.struct
11ea0 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b   Expr {.  u8 op;
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65   /* Operation pe
11ed0 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20  rformed by this 
11ee0 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61  node */.  char a
11ef0 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20  ffinity;        
11f00 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
11f10 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f   of the column o
11f20 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c  r 0 if not a col
11f30 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61  umn */.  u32 fla
11f40 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
11f50 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73  /* Various flags
11f60 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f  .  EP_* See belo
11f70 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  w */.  union {. 
11f80 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b     char *zToken;
11f90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
11fa0 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74  en value. Zero t
11fb0 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65  erminated and de
11fc0 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e  quoted */.    in
11fd0 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20  t iValue;       
11fe0 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61       /* Non-nega
11ff0 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c  tive integer val
12000 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75  ue if EP_IntValu
12010 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f  e */.  } u;..  /
12020 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65  * If the EP_Toke
12030 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65  nOnly flag is se
12040 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
12050 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
12060 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
12070 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
12080 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
12090 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
120a0 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
120b0 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
120c0 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
120d0 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
120e0 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  on. .  *********
120f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
12130 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
12140 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
12150 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
12160 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
12170 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
12180 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
12190 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
121a0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
121b0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
121c0 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
121d0 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
121e0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
121f0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
12200 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
12210 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
12220 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
12230 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
12240 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
12250 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
12260 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
12270 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
12280 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
12290 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
122a0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
122b0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
122c0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
122d0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
122e0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
122f0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
12300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
12340 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
12350 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
12360 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
12370 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
12380 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
12390 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
123a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
123b0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
123c0 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
123d0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
123e0 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
123f0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
12420 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
12450 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
12460 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
12490 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65 73 20  ly:  1000 times 
124a0 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
124b0 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
124c0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
124d0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
124e0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
124f0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12500 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
12510 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
12520 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
12530 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
12540 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
12550 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
12560 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
12570 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
12580 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
12590 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
125a0 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
125b0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
125c0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
125d0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
125f0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
12600 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
12610 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
12640 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
12650 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
12680 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
12690 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
126a0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
126b0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
126c0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
126d0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
126e0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
126f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
12700 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
12710 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
12720 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
12730 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
12740 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
12750 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
12760 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
12770 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
12780 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
12790 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e 20 4f   Originated in O
127a0 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61 75 73  N or USING claus
127b0 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23  e of a join */.#
127c0 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
127d0 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
127e0 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
127f0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
12800 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
12810 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
12820 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
12830 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
12840 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
12850 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
12860 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
12870 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
12880 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
12890 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
128a0 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
128b0 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
128c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
128d0 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
128e0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
128f0 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
12900 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
12910 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
12920 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
12930 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
12940 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
12950 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
12960 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
12970 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
12980 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
12990 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
129a0 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
129b0 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
129c0 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
129d0 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
129e0 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
129f0 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
12a00 45 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64  E opeartor */.#d
12a10 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 44 65  efine EP_FixedDe
12a20 73 74 20 30 78 30 30 30 32 30 30 20 2f 2a 20 52  st 0x000200 /* R
12a30 65 73 75 6c 74 20 6e 65 65 64 65 64 20 69 6e 20  esult needed in 
12a40 61 20 73 70 65 63 69 66 69 63 20 72 65 67 69 73  a specific regis
12a50 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ter */.#define E
12a60 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
12a70 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
12a80 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
12a90 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
12aa0 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
12ab0 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
12ac0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
12ad0 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
12ae0 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
12af0 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
12b00 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
12b10 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
12b20 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
12b30 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
12b40 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
12b50 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
12b60 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
12b70 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
12b80 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
12b90 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
12ba0 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
12bb0 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
12bc0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
12bd0 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
12be0 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
12bf0 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
12c00 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
12c10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
12c20 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
12c30 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
12c40 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
12c50 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
12c60 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
12c70 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
12c80 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
12c90 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
12ca0 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
12cb0 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
12cc0 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
12cd0 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
12ce0 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
12cf0 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
12d00 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
12d10 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
12d20 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70  s in the .** Exp
12d30 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
12d40 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
12d50 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
12d60 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
12d70 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
12d80 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
12d90 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
12da0 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
12db0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
12dc0 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
12dd0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
12de0 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
12df0 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
12e00 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
12e10 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
12e20 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
12e30 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
12e40 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
12e50 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
12e60 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
12e70 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
12e80 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
12e90 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
12ea0 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
12eb0 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
12ec0 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
12ed0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
12ee0 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
12ef0 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
12f00 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
12f10 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
12f20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
12f30 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
12f40 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
12f50 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
12f60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
12f70 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
12f80 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a   a normal Expr .
12f90 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
12fa0 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
12fb0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
12fc0 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
12fd0 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20  lags .** and an 
12fe0 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
12ff0 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
13000 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23  y flag set..*/.#
13010 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c  define EXPR_FULL
13020 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73  SIZE           s
13030 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20  izeof(Expr)     
13040 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69        /* Full si
13050 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  ze */.#define EX
13060 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20  PR_REDUCEDSIZE  
13070 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
13080 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20  xpr,iTable)  /* 
13090 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20  Common features 
130a0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
130b0 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20  TOKENONLYSIZE   
130c0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
130d0 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77  ,pLeft)   /* Few
130e0 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a  er features */..
130f0 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73  /*.** Flags pass
13100 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65  ed to the sqlite
13110 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74  3ExprDup() funct
13120 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61  ion. See the hea
13130 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20  der comment .** 
13140 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
13150 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
13160 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
13170 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
13180 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
13190 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
131a0 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
131b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
131c0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
131d0 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
131e0 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
131f0 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
13200 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
13210 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
13220 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
13230 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
13240 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
13250 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
13260 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
13270 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
13280 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
13290 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
132a0 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
132b0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
132c0 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
132d0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
132e0 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
132f0 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
13300 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
13310 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
13320 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
13330 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
13340 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
13350 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
13360 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
13370 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
13380 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
13390 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
133a0 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
133b0 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
133c0 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
133d0 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
133e0 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
133f0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
13400 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
13410 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
13420 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
13430 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
13440 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
13450 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
13460 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
13470 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
13480 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
13490 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
134a0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
134b0 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
134c0 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
134d0 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
134e0 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
134f0 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
13500 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
13510 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
13520 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
13530 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
13540 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
13550 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
13560 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20  e list */.  int 
13570 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20 20  iECursor;       
13580 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73 6f     /* VDBE Curso
13590 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  r associated wit
135a0 68 20 74 68 69 73 20 45 78 70 72 4c 69 73 74 20  h this ExprList 
135b0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
135c0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
135d0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
135e0 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
135f0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
13600 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
13610 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
13620 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
13630 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
13640 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
13650 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
13660 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
13670 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
13680 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
13690 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
136a0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
136b0 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
136c0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
136d0 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
136e0 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
136f0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
13700 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
13710 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
13720 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
13730 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
13740 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
13750 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
13760 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
13770 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
13780 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
13790 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ol;        /* Fo
137a0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
137b0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
137c0 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 75  ult set */.    u
137d0 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20  16 iAlias;      
137e0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
137f0 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
13800 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
13810 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
13820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
13830 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
13840 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
13850 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
13860 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
13870 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
13880 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
13890 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
138a0 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
138b0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
138c0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
138d0 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
138e0 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
138f0 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
13900 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
13910 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
13920 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
13930 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
13940 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
13950 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
13960 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
13970 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
13980 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
13990 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
139a0 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
139b0 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
139c0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
139d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
139e0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
139f0 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
13a00 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
13a10 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
13a20 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
13a30 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
13a40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
13a50 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
13a60 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
13a70 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
13a80 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
13a90 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
13aa0 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
13ab0 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
13ac0 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
13ad0 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
13ae0 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
13af0 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
13b00 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
13b10 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
13b20 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
13b30 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
13b40 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
13b50 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
13b60 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
13b70 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
13b80 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
13b90 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
13ba0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
13bb0 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
13bc0 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
13bd0 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
13be0 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
13bf0 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
13c00 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
13c10 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
13c20 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
13c30 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
13c40 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
13c50 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
13c60 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
13c70 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
13c80 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
13c90 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
13ca0 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
13cb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
13cc0 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
13cd0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
13ce0 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
13cf0 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
13d00 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
13d10 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
13d20 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
13d30 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
13d40 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
13d50 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
13d60 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
13d70 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
13d80 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
13d90 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
13da0 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
13db0 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
13dc0 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
13dd0 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
13de0 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42 69  /.typedef u64 Bi
13df0 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68  tmask;../*.** Th
13e00 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
13e10 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
13e20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
13e30 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
13e40 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
13e50 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
13e60 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
13e70 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
13e80 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
13e90 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
13ea0 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a  ask)1)<<(n))../*
13eb0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
13ec0 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
13ed0 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
13ee0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
13ef0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
13f00 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
13f10 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
13f20 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
13f30 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
13f40 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
13f50 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
13f60 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
13f70 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
13f80 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
13f90 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
13fa0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
13fb0 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
13fc0 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
13fd0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
13fe0 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
13ff0 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
14000 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
14010 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
14020 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
14030 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
14040 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
14050 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
14060 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
14070 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
14080 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
14090 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
140a0 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
140b0 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
140c0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
140d0 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
140e0 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
140f0 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
14100 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
14110 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
14120 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
14130 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
14140 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
14150 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
14160 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
14170 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
14180 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
14190 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
141a0 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
141b0 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
141c0 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
141d0 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
141e0 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
141f0 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
14200 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
14210 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
14220 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
14230 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
14240 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
14250 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
14260 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
14270 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
14280 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
14290 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
142a0 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38 20   SrcList {.  u8 
142b0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
142c0 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
142d0 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
142e0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
142f0 65 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63  e */.  u8 nAlloc
14300 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
14310 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
14320 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
14330 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
14340 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
14350 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
14360 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
14370 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
14380 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
14390 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
143a0 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
143b0 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
143c0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
143d0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
143e0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
143f0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
14400 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
14410 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
14420 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
14430 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
14440 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
14450 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
14460 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
14470 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
14480 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
14490 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
144a0 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
144b0 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
144c0 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
144d0 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
144e0 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
144f0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
14500 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
14510 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
14520 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
14530 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
14540 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
14550 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
14560 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
14570 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
14580 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
14590 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
145a0 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
145b0 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73  vious */.    uns
145c0 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
145d0 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
145e0 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
145f0 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
14600 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
14610 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31   isCorrelated :1
14620 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75  ;  /* True if su
14630 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72 65  b-query is corre
14640 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  lated */.    uns
14650 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
14660 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
14670 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
14680 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65  outine */.#ifnde
14690 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
146a0 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
146b0 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
146c0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
146d0 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
146e0 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
146f0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
14700 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
14710 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
14720 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
14730 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
14740 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
14750 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
14760 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
14770 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
14780 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
14790 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
147a0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
147b0 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
147c0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
147d0 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
147e0 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
147f0 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68 61   used */.    cha
14800 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f  r *zIndex;     /
14810 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
14820 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
14830 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
14840 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 6e  /.    Index *pIn
14850 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78  dex;    /* Index
14860 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65   structure corre
14870 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64  sponding to zInd
14880 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ex, if any */.  
14890 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
148a0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
148b0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
148c0 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
148d0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
148e0 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
148f0 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
14900 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
14910 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
14920 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
14930 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
14940 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
14950 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
14960 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
14970 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
14980 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
14990 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
149a0 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
149b0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
149c0 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
149d0 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
149e0 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
149f0 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
14a00 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
14a10 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
14a20 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
14a30 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
14a40 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
14a50 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
14a60 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
14a70 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
14a80 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
14a90 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
14aa0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
14ab0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
14ac0 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
14ad0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
14ae0 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
14af0 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
14b00 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
14b10 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
14b20 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
14b30 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
14b40 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  member..*/.#defi
14b50 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
14b60 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30  _NORMAL   0x0000
14b70 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65   /* No-op */.#de
14b80 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
14b90 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30  BY_MIN      0x00
14ba0 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  01 /* ORDER BY p
14bb0 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69  rocessing for mi
14bc0 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  n() func */.#def
14bd0 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
14be0 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30 30  Y_MAX      0x000
14bf0 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72  2 /* ORDER BY pr
14c00 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78  ocessing for max
14c10 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  () func */.#defi
14c20 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
14c30 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30 34  _DESIRED  0x0004
14c40 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f   /* Want to do o
14c50 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44  ne-pass UPDATE/D
14c60 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  ELETE */.#define
14c70 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
14c80 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20 2f  S_OK    0x0008 /
14c90 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
14ca0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
14cb0 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
14cc0 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43  HERE_OMIT_OPEN_C
14cd0 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a 20  LOSE  0x0010 /* 
14ce0 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61 72  Table cursors ar
14cf0 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a  e already open *
14d00 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
14d10 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20 20  FORCE_TABLE     
14d20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f   0x0020 /* Do no
14d30 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f  t use an index-o
14d40 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23 64  nly search */.#d
14d50 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54  efine WHERE_ONET
14d60 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30  ABLE_ONLY    0x0
14d70 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65  040 /* Only code
14d80 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20 69   the 1st table i
14d90 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64  n pTabList */.#d
14da0 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f  efine WHERE_AND_
14db0 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78 30  ONLY         0x0
14dc0 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65  080 /* Don't use
14dd0 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52 20   indices for OR 
14de0 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
14df0 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20   WHERE_GROUPBY  
14e00 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20 2f          0x0100 /
14e10 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65  * pOrderBy is re
14e20 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20  ally a GROUP BY 
14e30 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
14e40 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20  _DISTINCTBY     
14e50 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72 64    0x0200 /* pOrd
14e60 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erby is really a
14e70 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65   DISTINCT clause
14e80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14e90 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20  E_WANT_DISTINCT 
14ea0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c     0x0400 /* All
14eb0 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f   output needs to
14ec0 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a   be distinct */.
14ed0 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
14ee0 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
14ef0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
14f00 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
14f10 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
14f20 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
14f30 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
14f40 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
14f50 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
14f60 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
14f70 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
14f80 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
14f90 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
14fa0 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
14fb0 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
14fc0 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
14fd0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
14fe0 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
14ff0 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
15000 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
15010 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
15020 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
15030 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
15040 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
15050 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
15060 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
15070 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
15080 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
15090 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
150a0 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
150b0 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
150c0 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
150d0 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
150e0 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
150f0 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
15100 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
15110 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
15120 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
15130 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
15140 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
15150 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
15160 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
15170 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
15180 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
15190 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
151a0 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
151b0 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
151c0 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
151d0 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
151e0 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
151f0 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
15200 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
15210 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f  nner-most .** co
15220 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
15230 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
15240 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
15250 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
15260 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
15270 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
15280 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
15290 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
152a0 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
152b0 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
152c0 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
152d0 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
152e0 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
152f0 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
15300 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
15310 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
15320 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
15330 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
15340 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
15350 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
15360 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63  nted. .**.** Eac
15370 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
15380 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
15390 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
153a0 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
153b0 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
153c0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
153d0 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
153e0 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
153f0 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
15400 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
15410 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
15420 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
15430 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
15440 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
15450 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
15460 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
15470 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
15480 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
15490 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
154a0 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
154b0 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
154c0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
154d0 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
154e0 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
154f0 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
15500 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
15510 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
15520 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
15530 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
15540 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
15550 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
15560 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
15570 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
15580 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
15590 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
155a0 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
155b0 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
155c0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
155d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
155e0 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
155f0 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
15600 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
15610 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15620 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
15630 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
15640 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
15650 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b 20  /.  u8 ncFlags; 
15660 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
15670 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
15680 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
15690 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
156a0 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
156b0 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
156c0 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
156d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  ..*/.#define NC_
156e0 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20 20  AllowAgg  0x01  
156f0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
15700 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
15710 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
15720 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
15730 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65    0x02    /* One
15740 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
15750 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
15760 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
15770 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20 20  IsCheck   0x04  
15780 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
15790 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
157a0 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
157b0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
157c0 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38 20  _InAggFunc 0x08 
157d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
157e0 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
157f0 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
15800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50   */.#define NC_P
15810 61 72 74 49 64 78 20 20 20 30 78 31 30 20 20 20  artIdx   0x10   
15820 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
15830 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20  lving a partial 
15840 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a  index WHERE */..
15850 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
15860 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
15870 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
15880 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
15890 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
158a0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
158b0 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
158c0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
158d0 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
158e0 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
158f0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
15900 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
15910 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
15920 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
15930 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
15940 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
15950 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
15960 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
15970 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
15980 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
15990 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
159a0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
159b0 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
159c0 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
159d0 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
159e0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
159f0 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
15a00 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
15a10 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
15a20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
15a30 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
15a40 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
15a50 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
15a60 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
15a70 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
15a80 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
15a90 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
15aa0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
15ab0 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
15ac0 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
15ad0 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
15ae0 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
15af0 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
15b00 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
15b10 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15b20 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
15b30 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
15b40 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
15b50 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
15b60 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
15b70 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
15b80 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
15b90 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
15ba0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
15bb0 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
15bc0 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
15bd0 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
15be0 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
15bf0 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
15c00 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
15c10 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
15c20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
15c30 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
15c40 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
15c50 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
15c60 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
15c70 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
15c80 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
15c90 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
15ca0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
15cb0 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
15cc0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
15cd0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
15ce0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
15cf0 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
15d00 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
15d10 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73 65  CEPT */.  u16 se
15d20 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
15d30 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
15d40 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
15d50 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
15d60 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
15d70 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
15d80 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
15d90 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74  ounters */.  int
15da0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d   addrOpenEphm[3]
15db0 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
15dc0 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
15dd0 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
15de0 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c  ct */.  u64 nSel
15df0 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20 2f  ectRow;        /
15e00 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
15e10 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
15e20 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  s */.  SrcList *
15e30 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
15e40 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
15e50 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
15e60 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
15e70 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
15e80 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
15e90 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
15ea0 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
15eb0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
15ec0 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
15ed0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
15ee0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
15ef0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
15f00 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
15f10 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
15f20 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
15f30 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
15f40 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
15f50 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
15f60 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
15f70 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
15f80 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
15f90 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
15fa0 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c  ompound */.  Sel
15fb0 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b  ect *pRightmost;
15fc0 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73      /* Right-mos
15fd0 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  t select in a co
15fe0 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
15ff0 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70  atement */.  Exp
16000 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
16010 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
16020 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
16030 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
16040 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
16050 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
16060 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
16070 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
16080 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  sed. */.};../*.*
16090 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
160a0 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
160b0 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
160c0 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
160d0 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
160e0 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  g"..*/.#define S
160f0 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
16100 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74    0x0001  /* Out
16110 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
16120 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
16130 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20  e SF_Resolved   
16140 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20       0x0002  /* 
16150 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65  Identifiers have
16160 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a   been resolved *
16170 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67  /.#define SF_Agg
16180 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30  regate       0x0
16190 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  004  /* Contains
161a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
161b0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
161c0 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
161d0 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73     0x0008  /* Us
161e0 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
161f0 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
16200 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
16210 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30  ed        0x0010
16220 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
16230 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
16240 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
16250 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
16260 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20  nfo     0x0020  
16270 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
16280 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
16290 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
162a0 65 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20  e SF_UseSorter  
162b0 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20       0x0040  /* 
162c0 53 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72  Sort using a sor
162d0 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ter */.#define S
162e0 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20  F_Values        
162f0 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e    0x0080  /* Syn
16300 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41  thesized from VA
16310 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23  LUES clause */.#
16320 64 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69  define SF_Materi
16330 61 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30  alize     0x0100
16340 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72    /* Force mater
16350 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69  ialization of vi
16360 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ews */.#define S
16370 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
16380 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72    0x0200  /* Par
16390 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
163a0 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
163b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
163c0 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30  aybeConvert    0
163d0 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  x0400  /* Need c
163e0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
163f0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
16400 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
16410 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65 6c  results of a sel
16420 65 63 74 20 63 61 6e 20 62 65 20 64 69 73 74 72  ect can be distr
16430 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
16440 6c 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20  l ways.  The.** 
16450 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
16460 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
16470 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66  t Type"..*/.#def
16480 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20  ine SRT_Union   
16490 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65       1  /* Store
164a0 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20   result as keys 
164b0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
164c0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70  define SRT_Excep
164d0 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65  t       2  /* Re
164e0 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d  move result from
164f0 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a   a UNION index *
16500 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78  /.#define SRT_Ex
16510 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a  ists       3  /*
16520 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20   Store 1 if the 
16530 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d  result is not em
16540 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
16550 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20  RT_Discard      
16560 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76  4  /* Do not sav
16570 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e  e the results an
16580 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68  ywhere */../* Th
16590 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
165a0 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72  e is ignored for
165b0 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   all of the abov
165c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e  e */.#define Ign
165d0 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29  orableOrderby(X)
165e0 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52   ((X->eDest)<=SR
165f0 54 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65 66  T_Discard)..#def
16600 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
16610 20 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70 75       5  /* Outpu
16620 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
16630 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
16640 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
16650 20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   6  /* Store res
16660 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
16670 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
16680 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
16690 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   7  /* Store res
166a0 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
166b0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
166c0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
166d0 20 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72 65       8  /* Store
166e0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
166f0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
16700 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  c rowid */.#defi
16710 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ne SRT_EphemTab 
16720 20 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74 65      9  /* Create
16730 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61   transient tab a
16740 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52  nd store like SR
16750 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  T_Table */.#defi
16760 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65  ne SRT_Coroutine
16770 20 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72 61     10  /* Genera
16780 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  te a single row 
16790 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a  of result */../*
167a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
167b0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
167c0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
167d0 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
167e0 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
167f0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
16800 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
16810 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
16820 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77  ;         /* How
16830 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
16840 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
16850 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
16860 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64 73  */.  char affSds
16870 74 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  t;     /* Affini
16880 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65  ty used when eDe
16890 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20  st==SRT_Set */. 
168a0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
168b0 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
168c0 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
168d0 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
168e0 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
168f0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42 61  st;        /* Ba
16900 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72  se register wher
16910 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72  e results are wr
16920 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
16930 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Sdst;        /* 
16940 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
16950 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f  ers allocated */
16960 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
16970 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
16980 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
16990 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
169a0 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
169b0 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  NT .** tables, t
169c0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
169d0 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
169e0 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
169f0 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
16a00 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
16a10 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
16a20 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
16a30 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
16a40 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
16a50 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
16a60 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
16a70 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
16a80 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
16a90 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
16aa0 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
16ab0 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74  re down within t
16ac0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
16ad0 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
16ae0 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
16af0 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
16b00 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
16b10 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
16b20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
16b30 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
16b40 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
16b50 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
16b60 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
16b70 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
16b80 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
16b90 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
16ba0 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
16bb0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
16bc0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
16bd0 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
16be0 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
16bf0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
16c00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
16c10 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
16c20 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
16c30 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
16c40 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
16c50 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
16c60 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
16c70 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
16c80 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
16c90 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
16ca0 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
16cb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
16cc0 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
16cd0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
16ce0 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
16cf0 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
16d00 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
16d10 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
16d20 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
16d30 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69  for each .** tri
16d40 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
16d50 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
16d60 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
16d70 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
16d80 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
16d90 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
16da0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
16db0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
16dc0 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
16dd0 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
16de0 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
16df0 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
16e00 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
16e10 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
16e20 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
16e30 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
16e40 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
16e50 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
16e60 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
16e70 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
16e80 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
16e90 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
16ea0 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
16eb0 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
16ec0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
16ed0 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
16ee0 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
16ef0 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
16f00 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
16f10 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
16f20 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
16f30 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
16f40 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
16f50 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
16f60 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
16f70 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
16f80 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
16f90 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
16fa0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
16fb0 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
16fc0 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
16fd0 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
16fe0 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73   of INSERT .** s
16ff0 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
17000 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
17010 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
17020 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
17030 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
17040 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
17050 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
17060 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
17070 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
17080 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
17090 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
170a0 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
170b0 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
170c0 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
170d0 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
170e0 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
170f0 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
17100 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
17110 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
17120 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
17130 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
17140 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
17150 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
17160 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
17170 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
17180 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
17190 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
171a0 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
171b0 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
171c0 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
171d0 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
171e0 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
171f0 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
17200 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
17210 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
17220 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
17230 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71  >30.  typedef sq
17240 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62  lite3_uint64 yDb
17250 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79  Mask;.#else.  ty
17260 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
17270 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64  nt yDbMask;.#end
17280 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
17290 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
172a0 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
172b0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
172c0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
172d0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
172e0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
172f0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
17300 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
17310 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
17320 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
17330 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
17340 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
17350 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
17360 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
17370 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
17380 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
17390 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
173a0 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
173b0 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
173c0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
173d0 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
173e0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
173f0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
17400 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
17410 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
17420 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
17430 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
17440 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
17450 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
17460 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
17470 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
17480 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
17490 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
174a0 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
174b0 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
174c0 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
174d0 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
174e0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
174f0 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
17500 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
17510 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
17520 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
17530 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
17540 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
17550 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
17560 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
17570 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
17580 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
17590 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
175a0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
175b0 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
175c0 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
175d0 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
175e0 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
175f0 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
17600 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
17610 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
17620 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
17630 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
17640 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
17650 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
17660 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
17670 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
17680 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
17690 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
176a0 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
176b0 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
176c0 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
176d0 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
176e0 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
176f0 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
17700 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
17710 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17720 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
17730 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
17740 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
17750 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
17760 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17770 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
17780 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
17790 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e  pReg[] */.  u8 n
177a0 54 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20  TempInUse;      
177b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54   /* Number of aT
177c0 65 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74  empReg[] current
177d0 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
177e0 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
177f0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
17800 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
17810 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
17820 20 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20    u8 iColCache; 
17830 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65         /* Next e
17840 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68  ntry in aColCach
17850 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a  e[] to replace *
17860 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
17870 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
17880 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
17890 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
178a0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
178b0 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
178c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
178d0 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
178e0 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
178f0 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
17900 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
17910 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
17920 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
17930 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
17940 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74  query() */.  int
17950 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
17960 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
17970 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
17980 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
17990 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
179a0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
179b0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
179c0 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
179d0 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
179e0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
179f0 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
17a00 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
17a10 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
17a20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
17a30 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
17a40 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
17a50 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
17a60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
17a70 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
17a80 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
17a90 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
17aa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ab0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
17ac0 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
17ad0 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
17ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17af0 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
17b00 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
17b10 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
17b20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
17b30 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
17b40 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
17b50 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
17b60 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
17b70 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
17b80 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
17b90 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
17ba0 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20 20  iPartIdxTab;    
17bb0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65 73   /* Table corres
17bc0 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61 72  ponding to a par
17bd0 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20  tial index */.  
17be0 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
17bf0 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
17c00 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
17c10 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
17c20 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
17c30 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
17c40 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
17c50 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
17c60 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
17c70 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74  u values */.  st
17c80 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b  ruct yColCache {
17c90 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
17ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
17cb0 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ble cursor numbe
17cc0 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  r */.    int iCo
17cd0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  lumn;          /
17ce0 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e  * Table column n
17cf0 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20  umber */.    u8 
17d00 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20  tempReg;        
17d10 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20     /* iReg is a 
17d20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74 68  temp register th
17d30 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66  at needs to be f
17d40 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  reed */.    int 
17d50 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
17d60 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76    /* Nesting lev
17d70 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52  el */.    int iR
17d80 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eg;             
17d90 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c 75  /* Reg with valu
17da0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
17db0 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20  . 0 means none. 
17dc0 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20  */.    int lru; 
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17de0 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75  Least recently u
17df0 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74 68  sed entry has th
17e00 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
17e10 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68   */.  } aColCach
17e20 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e[SQLITE_N_COLCA
17e30 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f  CHE];  /* One fo
17e40 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61  r each column ca
17e50 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79  che entry */.  y
17e60 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b  DbMask writeMask
17e70 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77  ;   /* Start a w
17e80 72 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  rite transaction
17e90 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61   on these databa
17ea0 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  ses */.  yDbMask
17eb0 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a   cookieMask;  /*
17ec0 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65   Bitmask of sche
17ed0 6d 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61  ma verified data
17ee0 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63  bases */.  int c
17ef0 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20 20 20 20  ookieGoto;      
17f00 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
17f10 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20  _Goto to cookie 
17f20 76 65 72 69 66 69 65 72 20 73 75 62 72 6f 75 74  verifier subrout
17f30 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ine */.  int coo
17f40 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f  kieValue[SQLITE_
17f50 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b  MAX_ATTACHED+2];
17f60 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63    /* Values of c
17f70 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79  ookies to verify
17f80 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
17f90 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
17fa0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
17fb0 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
17fc0 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
17fd0 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
17fe0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
17ff0 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
18000 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
18010 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
18020 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
18030 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
18040 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
18050 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
18060 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65  rogram */.  Toke
18070 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
18080 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
18090 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
180a0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
180b0 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  d */.#ifndef SQL
180c0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
180d0 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
180e0 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
180f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
18100 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
18110 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
18120 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
18130 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
18140 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
18150 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
18160 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
18170 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
18180 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
18190 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
181a0 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20  unters */..  /* 
181b0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  Information used
181c0 20 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72   while coding tr
181d0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20  igger programs. 
181e0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70  */.  Parse *pTop
181f0 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72  level;    /* Par
18200 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  se structure for
18210 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f   main program (o
18220 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62  r NULL) */.  Tab
18230 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b  le *pTriggerTab;
18240 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67    /* Table trigg
18250 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f  ers are being co
18260 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32  ded for */.  u32
18270 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20   nQueryLoop;    
18280 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20    /* Est number 
18290 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66  of iterations of
182a0 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67   a query (10*log
182b0 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f  2(N)) */.  u32 o
182c0 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ldmask;         
182d0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a  /* Mask of old.*
182e0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
182f0 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77  ced */.  u32 new
18300 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a  mask;         /*
18310 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63   Mask of new.* c
18320 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65  olumns reference
18330 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67  d */.  u8 eTrigg
18340 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54  erOp;       /* T
18350 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
18360 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45  ERT or TK_DELETE
18370 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66   */.  u8 eOrconf
18380 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65  ;          /* De
18390 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
183a0 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69  T policy for tri
183b0 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20  gger steps */.  
183c0 75 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65  u8 disableTrigge
183d0 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  rs;  /* True to 
183e0 64 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73  disable triggers
183f0 20 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20   */..  /* Above 
18400 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
18410 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
18420 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
18430 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
18440 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
18450 73 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e  sion */..  int n
18460 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Var;            
18470 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18480 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20  f '?' variables 
18490 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20  seen in the SQL 
184a0 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
184b0 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20  nzVar;          
184c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
184d0 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f  of available slo
184e0 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f  ts in azVar[] */
184f0 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18510 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
18520 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
18530 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
18540 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18550 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
18560 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
18570 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
18580 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
18590 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
185a0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
185b0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
185c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
185d0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
185e0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
185f0 6e 64 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61  ndif.  int nAlia
18600 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
18610 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c   /* Number of al
18620 69 61 73 65 64 20 72 65 73 75 6c 74 20 73 65 74  iased result set
18630 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e   columns */.  in
18640 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20  t nHeight;      
18650 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
18660 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68  ssion tree heigh
18670 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62  t of current sub
18680 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64  -select */.#ifnd
18690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
186a0 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65  XPLAIN.  int iSe
186b0 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20  lectId;         
186c0 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72     /* ID of curr
186d0 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45  ent select for E
186e0 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f  XPLAIN output */
186f0 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65  .  int iNextSele
18700 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ctId;        /* 
18710 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  Next available s
18720 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50  elect ID for EXP
18730 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23  LAIN output */.#
18740 65 6e 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61  endif.  char **a
18750 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
18760 20 20 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f    /* Pointers to
18770 20 6e 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65   names of parame
18780 74 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a  ters */.  Vdbe *
18790 70 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20  pReprepare;     
187a0 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20      /* VM being 
187b0 72 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69  reprepared (sqli
187c0 74 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20  te3Reprepare()) 
187d0 2a 2f 0a 20 20 69 6e 74 20 2a 61 41 6c 69 61 73  */.  int *aAlias
187e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
187f0 2a 20 52 65 67 69 73 74 65 72 20 75 73 65 64 20  * Register used 
18800 74 6f 20 68 6f 6c 64 20 61 6c 69 61 73 65 64 20  to hold aliased 
18810 72 65 73 75 6c 74 20 2a 2f 0a 20 20 63 6f 6e 73  result */.  cons
18820 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
18830 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
18840 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
18850 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
18860 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
18870 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
18880 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
18890 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
188a0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
188b0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
188c0 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
188d0 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
188e0 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
188f0 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
18900 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18910 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
18920 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
18930 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
18940 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
18950 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
18960 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
18970 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
18980 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
18990 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
189a0 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
189b0 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
189c0 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
189d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
189e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
189f0 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18a10 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
18a20 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
18a30 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
18a40 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
18a50 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
18a60 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
18a70 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
18a80 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
18a90 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
18aa0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
18ab0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
18ac0 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
18ad0 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
18ae0 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
18af0 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
18b00 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
18b10 72 69 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  riggers */.};../
18b20 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
18b30 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
18b40 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
18b50 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
18b60 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
18b70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18b80 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
18b90 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
18ba0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
18bb0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
18bc0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
18bd0 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
18be0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
18bf0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
18c00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
18c10 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
18c20 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
18c30 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
18c40 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
18c50 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
18c60 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
18c70 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
18c80 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
18c90 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
18ca0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
18cb0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
18cc0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
18cd0 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
18ce0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
18cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18d00 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
18d10 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
18d20 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
18d30 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
18d40 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2f 0a  ous opcodes..*/.
18d50 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e  #define OPFLAG_N
18d60 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30  CHANGE       0x0
18d70 31 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  1    /* Set to u
18d80 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
18d90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  e */.#define OPF
18da0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
18db0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65 74    0x02    /* Set
18dc0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
18dd0 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
18de0 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
18df0 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
18e00 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
18e10 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
18e20 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
18e30 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
18e40 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
18e50 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
18e60 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
18e70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18e80 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
18e90 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
18ea0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
18eb0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
18ec0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
18ed0 43 4c 45 41 52 43 41 43 48 45 20 20 20 20 30 78  CLEARCACHE    0x
18ee0 32 30 20 20 20 20 2f 2a 20 43 6c 65 61 72 20 70  20    /* Clear p
18ef0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 61 63 68  seudo-table cach
18f00 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d 6e 20 2a  e in OP_Column *
18f10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
18f20 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
18f30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
18f40 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
18f50 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
18f60 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
18f70 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
18f80 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
18f90 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
18fa0 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
18fb0 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
18fc0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
18fd0 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
18fe0 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
18ff0 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
19000 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
19010 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
19020 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
19030 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
19040 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
19050 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
19060 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
19070 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
19080 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
19090 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
190a0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
190b0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
190c0 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
190d0 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
190e0 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
190f0 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f 69 6e  ger. . *. * Poin
19100 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65  ters to instance
19110 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
19120 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69  ger are stored i
19130 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31  n two ways.. * 1
19140 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61  . In the "trigHa
19150 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28  sh" hash table (
19160 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69  part of the sqli
19170 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73  te3* that repres
19180 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20 20 20  ents the . *    
19190 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
191a0 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
191b0 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
191c0 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
191d0 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
191e0 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
191f0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
19200 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
19210 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
19220 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
19230 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
19240 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
19250 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
19260 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
19270 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
19280 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
19290 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
192a0 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
192b0 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
192c0 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
192d0 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
192e0 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
192f0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
19300 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
19310 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
19320 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
19330 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
19340 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
19350 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
19360 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
19370 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
19380 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
19390 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
193c0 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
193d0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
193e0 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
193f0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
19400 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
19410 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
19420 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
19430 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
19440 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
19450 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
19460 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
19470 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
19480 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
19490 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
194a0 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
194b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
194c0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
194d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
194e0 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
194f0 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
19500 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
19510 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
19520 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
19530 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
19560 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
19570 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
19580 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
19590 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
195a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
195b0 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
195c0 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
195d0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
195e0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
195f0 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
19600 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
19610 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
19620 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
19630 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
19640 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
19650 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
19660 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
19670 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
19680 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
19690 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
196a0 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
196b0 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
196c0 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
196d0 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
196e0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
196f0 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ch. .**.** If th
19700 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
19710 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
19720 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
19730 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
19740 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
19750 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
19760 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
19770 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
19780 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
19790 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
197a0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
197b0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
197c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
197d0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
197e0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
197f0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
19800 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
19810 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
19820 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 20  rigger-program. 
19830 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
19840 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
19850 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
19860 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
19870 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
19880 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
19890 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
198a0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
198b0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
198c0 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a 20 61  ber of the . * a
198d0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
198e0 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
198f0 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
19900 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
19910 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
19920 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
19930 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
19940 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68 65 20  ram.. * . * The 
19950 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69  "op" member indi
19960 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68  cates whether th
19970 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22  is is a "DELETE"
19980 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44  , "INSERT", "UPD
19990 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45  ATE" or. * "SELE
199a0 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54  CT" statement. T
199b0 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74  he meanings of t
199c0 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73  he other members
199d0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
199e0 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75 65 20  y the . * value 
199f0 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
19a00 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
19a10 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
19a20 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
19a30 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
19a40 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
19a50 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
19a60 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
19a70 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
19a80 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
19a90 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
19aa0 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
19ab0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
19ac0 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
19ad0 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
19ae0 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74 20 20  ULL.. * target  
19af0 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
19b00 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
19b10 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
19b20 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f  e to insert into
19b30 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
19b40 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
19b50 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
19b60 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65  VALUES ... state
19b70 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
19b80 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
19b90 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f  stores values to
19ba0 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74   be inserted. Ot
19bb0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
19bc0 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66   pIdList   -> If
19bd0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
19be0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f  RT INTO ... (<co
19bf0 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c  lumn-names>) VAL
19c00 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20 20 20  UES ... . *     
19c10 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
19c20 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
19c30 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
19c40 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
19c50 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
19c60 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
19c70 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
19c80 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20 20 20  E). * target    
19c90 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c 64 69  -> A token holdi
19ca0 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20 6e 61  ng the quoted na
19cb0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
19cc0 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
19cd0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
19ce0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
19cf0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
19d00 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
19d10 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
19d30 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
19d40 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55   . * (op == TK_U
19d50 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67 65 74  PDATE). * target
19d60 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
19d70 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
19d80 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
19d90 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20 72 6f  ble to update ro
19da0 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65 72 65  ws of.. * pWhere
19db0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
19dc0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
19dd0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
19de0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
19df0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
19e00 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
19e10 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
19e20 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
19e30 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
19e40 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
19e50 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
19e60 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
19e70 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
19e80 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
19e90 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
19ea0 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
19eb0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
19ec0 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a 73 74  ment.. * . */.st
19ed0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
19ee0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
19ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
19f00 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
19f10 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
19f20 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
19f30 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
19f40 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
19f50 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
19f60 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
19f70 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
19f80 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
19f90 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
19fa0 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
19fb0 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
19fc0 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74 20 6f  ELECT statment o
19fd0 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
19fe0 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54 20 2e  INTO .. SELECT .
19ff0 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 74 61  .. */.  Token ta
1a000 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rget;        /* 
1a010 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
1a020 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
1a030 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
1a040 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1a050 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1a060 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
1a070 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
1a080 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1a090 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
1a0a0 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
1a0b0 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63 6c 61  ATE.  VALUES cla
1a0c0 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  use for INSERT *
1a0d0 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
1a0e0 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
1a0f0 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
1a100 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
1a110 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
1a120 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
1a130 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
1a140 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
1a150 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
1a160 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
1a170 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
1a180 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
1a190 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
1a1a0 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1a1b0 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
1a1c0 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
1a1d0 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
1a1e0 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
1a1f0 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
1a200 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
1a210 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
1a220 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a 2f 0a   explicit.  .*/.
1a230 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
1a240 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
1a250 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
1a260 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1a270 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
1a280 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
1a290 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
1a2a0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
1a2b0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1a2c0 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
1a2d0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
1a2e0 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
1a2f0 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
1a300 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
1a310 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
1a320 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1a330 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
1a340 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
1a350 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
1a360 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
1a370 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
1a380 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
1a390 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
1a3a0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
1a3b0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
1a3c0 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
1a3d0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
1a3e0 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
1a3f0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
1a400 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
1a410 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
1a420 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
1a430 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
1a440 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
1a450 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
1a460 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
1a470 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
1a480 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
1a490 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  end..*/.struct S
1a4a0 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69  trAccum {.  sqli
1a4b0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
1a4c0 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74   /* Optional dat
1a4d0 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73  abase for lookas
1a4e0 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c  ide.  Can be NUL
1a4f0 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61  L */.  char *zBa
1a500 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  se;         /* A
1a510 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e   base allocation
1a520 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c  .  Not from mall
1a530 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  oc. */.  char *z
1a540 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
1a550 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
1a560 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
1a570 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20 20 20    int  nChar;   
1a580 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
1a590 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
1a5a0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20  o far */.  int  
1a5b0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
1a5c0 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61  /* Amount of spa
1a5d0 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  ce allocated in 
1a5e0 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 20  zText */.  int  
1a5f0 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  mxAlloc;        
1a600 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77  /* Maximum allow
1a610 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  ed string length
1a620 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65 4d 61   */.  u8   useMa
1a630 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 30 3a  lloc;      /* 0:
1a640 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c 69 74   none,  1: sqlit
1a650 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32 3a 20  e3DbMalloc,  2: 
1a660 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 20 2a  sqlite3_malloc *
1a670 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f  /.  u8   accErro
1a680 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41  r;       /* STRA
1a690 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54  CCUM_NOMEM or ST
1a6a0 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f  RACCUM_TOOBIG */
1a6b0 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
1a6c0 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
1a6d0 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1a6e0 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a 2a 2a  TOOBIG  2../*.**
1a6f0 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
1a700 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1a710 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
1a720 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
1a730 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
1a740 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
1a750 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
1a760 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
1a770 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
1a780 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
1a790 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
1a7a0 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
1a7b0 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
1a7c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
1a7d0 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
1a7e0 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
1a7f0 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
1a800 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
1a810 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
1a820 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
1a830 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
1a840 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
1a850 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
1a860 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
1a870 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
1a880 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
1a890 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
1a8a0 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
1a8b0 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
1a8c0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
1a8d0 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
1a8e0 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
1a8f0 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
1a900 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
1a910 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
1a920 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
1a930 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
1a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a950 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1a960 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
1a970 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
1a980 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
1a990 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1a9a0 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
1a9b0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
1a9c0 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a9e0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
1a9f0 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
1aa00 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1aa30 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
1aa40 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
1aa50 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
1aa80 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
1aa90 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
1aaa0 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
1aad0 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
1aae0 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
1ab10 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
1ab20 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
1ab30 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
1ab40 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1ab50 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
1ab60 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
1ab70 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1ab80 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
1ab90 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1aba0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
1abb0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
1abc0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
1abd0 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
1abe0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
1abf0 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
1ac00 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
1ac10 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
1ac20 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
1ac30 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
1ac40 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
1ac50 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ac70 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
1ac80 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
1ac90 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1acb0 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
1acc0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
1acd0 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
1ace0 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
1acf0 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
1ad00 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
1ad10 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
1ad20 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
1ad30 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
1ad40 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
1ad50 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
1ad60 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
1ad70 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
1ad80 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
1ad90 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
1ada0 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
1adb0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
1adc0 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
1add0 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
1ae00 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
1ae10 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
1ae20 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1ae30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ae40 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
1ae50 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
1ae60 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
1ae70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
1ae80 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
1ae90 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aeb0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1aec0 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
1aed0 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
1aee0 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1af00 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
1af10 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
1af20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
1af30 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
1af40 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
1af50 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
1af60 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
1af70 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
1af80 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
1af90 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
1afa0 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
1afb0 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  led */.  /* The 
1afc0 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
1afd0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
1afe0 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
1aff0 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
1b000 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
1b010 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
1b020 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
1b030 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b050 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
1b060 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
1b070 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
1b080 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b0a0 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
1b0b0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
1b0c0 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
1b0d0 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b0f0 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
1b100 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
1b110 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
1b120 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
1b130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1b140 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
1b150 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
1b160 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
1b170 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
1b180 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
1b190 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
1b1a0 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1b1b0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
1b1c0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
1b1d0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
1b1e0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
1b1f0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69 6e 74  alize() */.  int
1b200 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b220 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
1b230 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
1b240 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
1b250 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
1b260 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
1b270 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
1b280 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
1b290 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1b2b0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
1b2c0 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69 6e 74   xLog() */.  int
1b2d0 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
1b2e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1b2f0 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
1b300 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
1b310 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
1b320 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
1b330 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
1b340 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
1b350 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
1b360 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
1b370 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 7d 3b  ogArg;.#endif.};
1b380 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20  ../*.** Context 
1b390 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64  pointer passed d
1b3a0 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20  own through the 
1b3b0 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74  tree-walk..*/.st
1b3c0 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20  ruct Walker {.  
1b3d0 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
1b3e0 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
1b3f0 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
1b400 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
1b410 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
1b420 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
1b430 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
1b440 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
1b450 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
1b460 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
1b490 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1b4a0 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
1b4b0 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b4d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
1b4e0 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 62  ueries */.  u8 b
1b4f0 53 65 6c 65 63 74 44 65 70 74 68 46 69 72 73 74  SelectDepthFirst
1b500 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b510 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75 62 71        /* Do subq
1b520 75 65 72 69 65 73 20 66 69 72 73 74 20 2a 2f 0a  ueries first */.
1b530 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
1b540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1b560 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
1b570 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
1b580 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
1b5b0 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
1b5c0 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b5f0 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 2a 2f  Integer value */
1b600 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53  .    SrcList *pS
1b610 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  rcList;         
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
1b640 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
1b650 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
1b660 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b670 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
1b680 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
1b690 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
1b6a0 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
1b6b0 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
1b6c0 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
1b6d0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
1b6e0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
1b6f0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
1b700 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
1b710 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
1b720 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1b730 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1b740 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
1b750 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
1b760 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1b770 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
1b780 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a  *, Select*);../*
1b790 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20  .** Return code 
1b7a0 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74  from the parse-t
1b7b0 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d  ree walking prim
1b7c0 69 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72  itives and their
1b7d0 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a  .** callbacks..*
1b7e0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f  /.#define WRC_Co
1b7f0 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a  ntinue    0   /*
1b800 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69   Continue down i
1b810 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a  nto children */.
1b820 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e  #define WRC_Prun
1b830 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f  e       1   /* O
1b840 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74  mit children but
1b850 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e   continue walkin
1b860 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64  g siblings */.#d
1b870 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20  efine WRC_Abort 
1b880 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61        2   /* Aba
1b890 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61  ndon the tree wa
1b8a0 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73  lk */../*.** Ass
1b8b0 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73  uming zIn points
1b8c0 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1b8d0 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68  te of a UTF-8 ch
1b8e0 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61  aracter,.** adva
1b8f0 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74  nce zIn to point
1b900 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79   to the first by
1b910 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55  te of the next U
1b920 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a  TF-8 character..
1b930 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
1b940 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29  E_SKIP_UTF8(zIn)
1b950 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
1b960 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66            \.  if
1b970 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78  ( (*(zIn++))>=0x
1b980 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20  c0 ){           
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20     \.    while( 
1b9b0 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30  (*zIn & 0xc0)==0
1b9c0 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20  x80 ){ zIn++; } 
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1b9e0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20       \.}../*.** 
1ba20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50  The SQLITE_*_BKP
1ba30 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62  T macros are sub
1ba40 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65  stitutes for the
1ba50 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74   error codes wit
1ba60 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61  h.** the same na
1ba70 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74  me but without t
1ba80 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e  he _BKPT suffix.
1ba90 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69    These macros i
1baa0 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65  nvoke.** routine
1bab0 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68  s that report th
1bac0 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e  e line-number on
1bad0 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72   which the error
1bae0 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75   originated.** u
1baf0 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67  sing sqlite3_log
1bb00 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65  ().  The routine
1bb10 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61  s also provide a
1bb20 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63   convenient plac
1bb30 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65  e.** to set a de
1bb40 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e  bugger breakpoin
1bb50 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
1bb60 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e  3CorruptError(in
1bb70 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  t);.int sqlite3M
1bb80 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b  isuseError(int);
1bb90 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74  .int sqlite3Cant
1bba0 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a  openError(int);.
1bbb0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
1bbc0 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69  ORRUPT_BKPT sqli
1bbd0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1bbe0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
1bbf0 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f  e SQLITE_MISUSE_
1bc00 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75  BKPT sqlite3Misu
1bc10 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  seError(__LINE__
1bc20 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
1bc30 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73  _CANTOPEN_BKPT s
1bc40 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
1bc50 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 0a 0a  ror(__LINE__)...
1bc60 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
1bc70 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
1bc80 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
1bc90 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
1bca0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
1bcb0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
1bcc0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
1bcd0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
1bce0 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c  o all.** the SQL
1bcf0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
1bd00 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
1bd10 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f 72 20  s an alisse for 
1bd20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1bd30 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
1bd40 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1bd50 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
1bd60 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1bd70 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
1bd80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1bd90 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S3.#endif../*.**
1bda0 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61   The ctype.h hea
1bdb0 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f  der is needed fo
1bdc0 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74  r non-ASCII syst
1bdd0 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f  ems.  It is also
1bde0 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54  .** needed by FT
1bdf0 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20  S3 when FTS3 is 
1be00 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20  included in the 
1be10 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f  amalgamation..*/
1be20 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1be30 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c  LITE_ASCII) || \
1be40 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
1be50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1be60 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
1be70 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
1be80 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74  )).# include <ct
1be90 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f  ype.h>.#endif../
1bea0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1beb0 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20  ng macros mimic 
1bec0 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62  the standard lib
1bed0 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74  rary functions t
1bee0 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73  oupper(),.** iss
1bef0 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28  pace(), isalnum(
1bf00 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64  ), isdigit() and
1bf10 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73   isxdigit(), res
1bf20 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a  pectively. The.*
1bf30 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e  * sqlite version
1bf40 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20  s only work for 
1bf50 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73  ASCII characters
1bf60 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
1bf70 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65  locale..*/.#ifde
1bf80 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23  f SQLITE_ASCII.#
1bf90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1bfa0 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26  oupper(x)  ((x)&
1bfb0 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  ~(sqlite3CtypeMa
1bfc0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
1bfd0 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64  )(x)]&0x20)).# d
1bfe0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1bff0 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74  pace(x)   (sqlit
1c000 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c010 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c020 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x01).# define sq
1c030 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20  lite3Isalnum(x) 
1c040 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c050 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c060 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64  r)(x)]&0x06).# d
1c070 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c080 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74  lpha(x)   (sqlit
1c090 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c0a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c0b0 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x02).# define sq
1c0c0 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20  lite3Isdigit(x) 
1c0d0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
1c0e0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
1c0f0 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64  r)(x)]&0x04).# d
1c100 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78  efine sqlite3Isx
1c110 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74  digit(x)  (sqlit
1c120 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
1c130 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
1c140 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x08).# define sq
1c150 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
1c160 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54    (sqlite3UpperT
1c170 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64  oLower[(unsigned
1c180 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65 6c 73   char)(x)]).#els
1c190 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1c1a0 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
1c1b0 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
1c1c0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1c1d0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
1c1e0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
1c1f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1c200 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
1c210 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
1c220 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
1c230 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1c240 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
1c250 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
1c260 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
1c270 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1c280 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
1c290 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
1c2a0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c2b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1c2c0 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
1c2d0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
1c2e0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
1c2f0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
1c300 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
1c310 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
1c320 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
1c330 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f  Internal functio
1c340 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a  n prototypes.*/.
1c350 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
1c360 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  trICmp sqlite3_s
1c370 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c 69 74  tricmp.int sqlit
1c380 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74  e3Strlen30(const
1c390 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
1c3a0 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
1c3b0 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
1c3c0 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
1c3d0 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
1c3e0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
1c3f0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
1c400 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1c410 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1c420 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 69  ite3MallocZero(i
1c430 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c440 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
1c450 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 76  qlite3*, int);.v
1c460 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
1c470 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
1c480 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71  , int);.char *sq
1c490 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71  lite3DbStrDup(sq
1c4a0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1c4b0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
1c4c0 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69  e3DbStrNDup(sqli
1c4d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
1c4e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
1c4f0 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69  lite3Realloc(voi
1c500 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  d*, int);.void *
1c510 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
1c520 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
1c530 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1c540 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1c550 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a  ealloc(sqlite3 *
1c560 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29 3b 0a  , void *, int);.
1c570 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
1c580 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ee(sqlite3*, voi
1c590 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1c5a0 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
1c5b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
1c5c0 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
1c5d0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
1c5e0 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63  d *sqlite3Scratc
1c5f0 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  hMalloc(int);.vo
1c600 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63  id sqlite3Scratc
1c610 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f  hFree(void*);.vo
1c620 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
1c630 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
1c640 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
1c650 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
1c660 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
1c670 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  lt(void);.void s
1c680 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c  qlite3BenignMall
1c690 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29  ocHooks(void (*)
1c6a0 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29  (void), void (*)
1c6b0 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73 71 6c  (void));.int sql
1c6c0 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
1c6d0 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
1c6e0 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
1c6f0 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
1c700 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
1c710 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
1c720 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
1c730 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
1c740 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
1c750 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
1c760 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
1c770 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
1c780 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
1c790 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
1c7a0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
1c7b0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
1c7c0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
1c7d0 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
1c7e0 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
1c7f0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
1c800 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
1c810 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
1c820 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
1c830 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
1c840 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
1c850 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
1c860 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
1c870 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
1c880 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
1c890 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
1c8a0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
1c8b0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
1c8c0 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73 65 0a  P)       .#else.
1c8d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1c8e0 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c  StackAllocRaw(D,
1c8f0 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  N)   sqlite3DbMa
1c900 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64  llocRaw(D,N).# d
1c910 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1c920 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1c930 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
1c940 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66  cZero(D,N).# def
1c950 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
1c960 46 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20  Free(D,P)       
1c970 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c  sqlite3DbFree(D,
1c980 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  P).#endif..#ifde
1c990 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1c9a0 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
1c9b0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
1c9c0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
1c9d0 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
1c9e0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
1c9f0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
1ca00 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
1ca10 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
1ca20 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
1ca30 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s5(void);.#endif
1ca40 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
1ca50 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
1ca60 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1ca70 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1ca80 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
1ca90 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
1caa0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
1cab0 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
1cac0 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
1cad0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
1cae0 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
1caf0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
1cb00 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
1cb10 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
1cb20 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
1cb30 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
1cb40 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
1cb50 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
1cb60 74 65 33 53 74 61 74 75 73 41 64 64 28 69 6e 74  te3StatusAdd(int
1cb70 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1cb80 69 74 65 33 53 74 61 74 75 73 53 65 74 28 69 6e  ite3StatusSet(in
1cb90 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e 64 65  t, int);..#ifnde
1cba0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
1cbb0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
1cbc0 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
1cbd0 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
1cbe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1cbf0 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
1cc00 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  f..void sqlite3V
1cc10 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d  XPrintf(StrAccum
1cc20 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
1cc30 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
1cc40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1cc50 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20 73 71  IT_TRACE.void sq
1cc60 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
1cc70 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
1cc80 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69  ar*, ...);.#endi
1cc90 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  f.char *sqlite3M
1cca0 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
1ccb0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1ccc0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1ccd0 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
1cce0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
1ccf0 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a 73  a_list);.char *s
1cd00 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28 73  qlite3MAppendf(s
1cd10 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63 6f  qlite3*,char*,co
1cd20 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
1cd30 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
1cd40 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69  TE_TEST) || defi
1cd50 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
1cd60 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
1cd70 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
1cd80 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
1cd90 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
1cda0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
1cdb0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
1cdc0 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
1cdd0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
1cde0 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72 6d  ../* Output form
1cdf0 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49 54  atting for SQLIT
1ce00 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c 41  E_TESTCTRL_EXPLA
1ce10 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  IN */.#if define
1ce20 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
1ce30 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20 20  TREE_EXPLAIN).  
1ce40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1ce50 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29 3b  ainBegin(Vdbe*);
1ce60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1ce70 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64 62  xplainPrintf(Vdb
1ce80 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
1ce90 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73 71   ...);.  void sq
1cea0 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28 56  lite3ExplainNL(V
1ceb0 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1cec0 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73 68  lite3ExplainPush
1ced0 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1cee0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 6f  sqlite3ExplainPo
1cef0 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  p(Vdbe*);.  void
1cf00 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46   sqlite3ExplainF
1cf10 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20 20  inish(Vdbe*);.  
1cf20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c  void sqlite3Expl
1cf30 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a 2c  ainSelect(Vdbe*,
1cf40 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69   Select*);.  voi
1cf50 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1cf60 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70 72  Expr(Vdbe*, Expr
1cf70 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1cf80 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1cf90 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69 73  t(Vdbe*, ExprLis
1cfa0 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  t*);.  const cha
1cfb0 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45 78  r *sqlite3VdbeEx
1cfc0 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a 29  planation(Vdbe*)
1cfd0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
1cfe0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 42   sqlite3ExplainB
1cff0 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
1d000 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 53   sqlite3ExplainS
1d010 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65 66  elect(A,B).# def
1d020 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61  ine sqlite3Expla
1d030 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64 65  inExpr(A,B).# de
1d040 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1d050 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42 29  ainExprList(A,B)
1d060 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d070 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28 58  3ExplainFinish(X
1d080 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d090 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f  e3VdbeExplanatio
1d0a0 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
1d0b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
1d0c0 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
1d0d0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
1d0e0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
1d0f0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
1d100 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1d110 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74 20  har*, ...);.int 
1d120 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
1d130 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
1d140 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
1d150 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
1d160 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1d170 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
1d180 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
1d190 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
1d1a0 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
1d1b0 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
1d1c0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
1d1d0 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
1d1e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
1d1f0 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
1d200 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
1d210 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
1d220 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
1d230 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
1d240 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
1d250 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
1d260 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
1d270 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
1d280 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d290 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  prAlloc(sqlite3*
1d2a0 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e  ,int,const Token
1d2b0 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  *,int);.Expr *sq
1d2c0 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65  lite3Expr(sqlite
1d2d0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1d2e0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1d2f0 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72  3ExprAttachSubtr
1d300 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ees(sqlite3*,Exp
1d310 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  r*,Expr*,Expr*);
1d320 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45  .Expr *sqlite3PE
1d330 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  xpr(Parse*, int,
1d340 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 63   Expr*, Expr*, c
1d350 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78  onst Token*);.Ex
1d360 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
1d370 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
1d380 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
1d390 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
1d3a0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
1d3b0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
1d3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d3d0 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
1d3e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
1d3f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1d400 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
1d410 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
1d420 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
1d430 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
1d440 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
1d450 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d460 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
1d470 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
1d480 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
1d490 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
1d4a0 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
1d4b0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
1d4c0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
1d4d0 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
1d4e0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
1d4f0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1d500 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
1d510 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
1d520 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
1d530 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
1d540 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
1d550 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
1d560 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1d570 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
1d580 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1d590 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
1d5a0 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
1d5b0 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1d5c0 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
1d5d0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
1d5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
1d5f0 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
1d600 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
1d610 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50 61  d sqlite3BeginPa
1d620 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  rse(Parse*,int);
1d630 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d  .void sqlite3Com
1d640 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67  mitInternalChang
1d650 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54 61  es(sqlite3*);.Ta
1d660 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
1d670 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
1d680 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
1d690 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
1d6a0 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
1d6b0 20 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73   *, int);.void s
1d6c0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1d6d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1d6e0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1d6f0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1d700 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1d710 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1d720 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1d730 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1d740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1d750 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1d760 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1d770 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1d780 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1d790 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1d7a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1d7b0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1d7c0 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1d7d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1d7e0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1d7f0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1d800 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1d810 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1d820 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1d830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d840 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1d850 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
1d860 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1d870 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1d880 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1d890 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1d8a0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1d8b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1d8c0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1d8d0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
1d8e0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1d8f0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
1d900 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1d910 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
1d920 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65  Parse *);..Bitve
1d930 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
1d940 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
1d950 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
1d960 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
1d970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1d980 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
1d990 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
1d9a0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
1d9b0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
1d9c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d9d0 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
1d9e0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
1d9f0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
1da00 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
1da10 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
1da20 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
1da30 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
1da40 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
1da50 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
1da60 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
1da70 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
1da80 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
1da90 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
1daa0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
1dab0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1dac0 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
1dad0 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69  t*, u8 iBatch, i
1dae0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1daf0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
1db00 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
1db10 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
1db20 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
1db30 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1db40 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
1db50 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1db60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1db70 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
1db80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1db90 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
1dba0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1dbb0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
1dbc0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
1dbd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
1dbe0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1dbf0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
1dc00 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1dc10 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1dc20 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1dc30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1dc40 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
1dc50 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1dc60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1dc70 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
1dc80 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
1dc90 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1dca0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1dcb0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
1dcc0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1dcd0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
1dce0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
1dcf0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1dd00 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
1dd10 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1dd20 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1dd30 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
1dd40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1dd50 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1dd60 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  (X).#endif.int s
1dd70 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74  qlite3CodeCorout
1dd80 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ine(Parse*, Sele
1dd90 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1dda0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1ddb0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
1ddc0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
1ddd0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
1dde0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
1ddf0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
1de00 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
1de10 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
1de20 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1de30 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1de40 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1de50 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1de60 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1de70 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1de80 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1de90 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1dea0 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1deb0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1dec0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1ded0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1dee0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1def0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1df00 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1df10 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1df20 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1df30 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1df40 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1df50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1df80 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1df90 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1dfa0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1dfb0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1dfc0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1dfd0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1dfe0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1dff0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1e000 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1e010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1e020 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1e030 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1e040 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1e050 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1e060 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1e070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1e080 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1e090 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1e0a0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1e0b0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1e0c0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1e0d0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
1e0e0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
1e0f0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74  sqlite3*,int,int
1e100 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
1e110 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
1e120 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
1e130 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
1e140 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
1e150 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
1e180 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1e190 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1e1a0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1e1b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1e1c0 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1e1d0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e1e0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1e1f0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1e200 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1e210 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e220 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1e250 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1e260 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1e270 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1e280 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1e290 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1e2a0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1e2b0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1e2c0 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1e2d0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1e2e0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e2f0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1e300 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1e310 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1e320 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1e330 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1e340 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1e350 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1e360 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1e370 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1e380 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1e390 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1e3a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1e3b0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1e3c0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1e3d0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1e3e0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1e3f0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1e400 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1e410 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1e420 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1e430 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1e440 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1e450 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1e460 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1e470 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1e480 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1e490 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1e4a0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
1e4b0 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
1e4c0 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
1e4d0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1e4e0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1e4f0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
1e500 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1e510 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
1e520 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1e530 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
1e540 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
1e550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1e560 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
1e570 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1e580 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
1e590 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
1e5a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1e5b0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28  prCodeGetColumn(
1e5c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1e5d0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  int, int, int, u
1e5e0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1e5f0 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
1e600 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
1e610 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1e620 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e630 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
1e640 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1e650 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e660 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
1e670 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
1e680 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e690 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1e6a0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
1e6b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1e6c0 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 2c 20  achePop(Parse*, 
1e6d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1e6e0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
1e6f0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
1e700 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e710 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
1e720 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1e730 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
1e740 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
1e750 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1e760 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1e770 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ode(Parse*, Expr
1e780 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1e790 69 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70  ite3ExprCodeTemp
1e7a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e7b0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
1e7c0 65 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74  e3ExprCodeTarget
1e7d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
1e7e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e7f0 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
1e800 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
1e810 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e820 74 65 33 45 78 70 72 43 6f 64 65 43 6f 6e 73 74  te3ExprCodeConst
1e830 61 6e 74 73 28 50 61 72 73 65 2a 2c 20 45 78 70  ants(Parse*, Exp
1e840 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
1e850 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
1e860 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1e870 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
1e880 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
1e890 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
1e8a0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1e8b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e8c0 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
1e8d0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
1e8e0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1e8f0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
1e900 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1e910 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1e920 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1e930 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
1e940 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
1e950 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1e960 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1e970 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
1e980 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
1e990 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
1e9a0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
1e9b0 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
1e9c0 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
1e9d0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1e9e0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1e9f0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1ea00 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1ea10 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1ea20 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1ea30 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1ea40 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
1ea50 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1ea60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
1ea70 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
1ea80 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
1ea90 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
1eaa0 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
1eab0 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1eac0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1ead0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1eae0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
1eaf0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
1eb00 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
1eb10 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
1eb20 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
1eb30 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1eb40 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
1eb50 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
1eb60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1eb70 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1eb80 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1eb90 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1eba0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1ebb0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1ebc0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1ebd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1ebe0 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1ebf0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1ec00 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1ec10 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1ec20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1ec30 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1ec40 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1ec50 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1ec60 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1ec70 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1ec80 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1ec90 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1eca0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1ecb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1ecc0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1ecd0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1ece0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1ecf0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1ed00 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1ed10 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1ed20 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1ed30 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1ed40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1ed50 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1ed60 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1ed70 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1ed80 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1ed90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1eda0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1edb0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1edc0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1edd0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1ede0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1edf0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1ee00 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1ee10 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1ee20 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1ee30 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1ee40 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1ee50 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1ee60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ee70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1ee80 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1ee90 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1eea0 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1eeb0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1eec0 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1eed0 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1eee0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1eef0 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1ef00 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1ef10 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1ef20 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1ef30 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1ef40 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1ef50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1ef60 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1ef70 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1ef80 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1ef90 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
1efa0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
1efb0 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 29   Trigger *, int)
1efc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
1efd0 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65  nerateRowIndexDe
1efe0 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62  lete(Parse*, Tab
1eff0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 29 3b  le*, int, int*);
1f000 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
1f010 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
1f020 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
1f030 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
1f040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
1f050 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e  enerateConstrain
1f060 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54  tChecks(Parse*,T
1f070 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 0a 20  able*,int,int,. 
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 20 20 20 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74      int*,int,int
1f0b0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
1f0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
1f0d0 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
1f0e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
1f0f0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
1f100 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
1f110 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
1f120 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
1f130 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
1f140 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1f150 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70  ite3BeginWriteOp
1f160 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  eration(Parse*, 
1f170 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f180 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74  sqlite3MultiWrit
1f190 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  e(Parse*);.void 
1f1a0 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28  sqlite3MayAbort(
1f1b0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
1f1c0 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61  lite3HaltConstra
1f1d0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
1f1e0 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 6e 74   int, char*, int
1f1f0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1f200 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
1f210 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
1f220 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
1f230 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
1f240 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
1f250 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
1f260 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
1f270 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
1f280 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
1f290 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
1f2a0 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
1f2b0 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
1f2c0 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
1f2d0 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
1f2e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75  ;.void sqlite3Fu
1f2f0 6e 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63  ncDefInsert(Func
1f300 44 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65  DefHash*, FuncDe
1f310 66 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  f*);.FuncDef *sq
1f320 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
1f330 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
1f340 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75   char*,int,int,u
1f350 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  8,u8);.void sqli
1f360 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74  te3RegisterBuilt
1f370 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  inFunctions(sqli
1f380 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1f390 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
1f3a0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
1f3b0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1f3c0 52 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75  RegisterGlobalFu
1f3d0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
1f3e0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
1f3f0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
1f400 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
1f410 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
1f420 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
1f430 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
1f440 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
1f450 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
1f460 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
1f470 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
1f480 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
1f490 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
1f4a0 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
1f4b0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
1f4c0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
1f4d0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
1f4e0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1f4f0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
1f500 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
1f510 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
1f520 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
1f530 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
1f560 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
1f570 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
1f580 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
1f590 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
1f5a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1f5b0 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
1f5c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1f5d0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
1f5e0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1f5f0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
1f600 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
1f610 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
1f620 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
1f630 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
1f640 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
1f650 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
1f660 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
1f670 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
1f680 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
1f690 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1f6a0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
1f6b0 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
1f6c0 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
1f6d0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f6f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1f700 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
1f710 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
1f720 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
1f730 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
1f740 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
1f750 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
1f760 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
1f770 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
1f780 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
1f790 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
1f7a0 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
1f7b0 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
1f7c0 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
1f7d0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1f7e0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
1f7f0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
1f800 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
1f810 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f820 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
1f830 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
1f840 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1f870 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
1f880 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
1f890 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
1f8a0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
1f8b0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
1f8c0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
1f8d0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
1f8e0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
1f8f0 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
1f900 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
1f910 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1f920 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1f930 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
1f940 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
1f950 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1f960 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
1f970 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1f980 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
1f990 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
1f9a0 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
1f9b0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
1f9c0 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
1f9d0 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
1f9e0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
1f9f0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
1fa00 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
1fa10 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65  vel : (p)).#else
1fa20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fa30 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42  3TriggersExist(B
1fa40 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65  ,C,D,E,F) 0.# de
1fa50 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65  fine sqlite3Dele
1fa60 74 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23  teTrigger(A,B).#
1fa70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
1fa80 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c  ropTriggerPtr(A,
1fa90 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1faa0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
1fab0 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29  teTrigger(A,B,C)
1fac0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fad0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28  3CodeRowTrigger(
1fae0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c  A,B,C,D,E,F,G,H,
1faf0 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  I).# define sqli
1fb00 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
1fb10 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c  rDirect(A,B,C,D,
1fb20 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E,F).# define sq
1fb30 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
1fb40 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e  (X, Y) 0.# defin
1fb50 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
1fb60 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65  plevel(p) p.# de
1fb70 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
1fb80 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43  gerColmask(A,B,C
1fb90 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64  ,D,E,F,G) 0.#end
1fba0 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
1fbb0 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20  oinType(Parse*, 
1fbc0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
1fbd0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1fbe0 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69  lite3CreateForei
1fbf0 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78  gnKey(Parse*, Ex
1fc00 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  prList*, Token*,
1fc10 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
1fc20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
1fc30 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ferForeignKey(Pa
1fc40 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e  rse*, int);.#ifn
1fc50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1fc60 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20  AUTHORIZATION.  
1fc70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
1fc80 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72  Read(Parse*,Expr
1fc90 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73  *,Schema*,SrcLis
1fca0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
1fcb0 65 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73  e3AuthCheck(Pars
1fcc0 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  e*,int, const ch
1fcd0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
1fce0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
1fcf0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
1fd00 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61  thContextPush(Pa
1fd10 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78  rse*, AuthContex
1fd20 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
1fd30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1fd40 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41  AuthContextPop(A
1fd50 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20  uthContext*);.  
1fd60 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52  int sqlite3AuthR
1fd70 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63  eadCol(Parse*, c
1fd80 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e  onst char *, con
1fd90 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b  st char *, int);
1fda0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
1fdb0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
1fdc0 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e  a,b,c,d).# defin
1fdd0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  e sqlite3AuthChe
1fde0 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20  ck(a,b,c,d,e)   
1fdf0 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66   SQLITE_OK.# def
1fe00 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
1fe10 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63  ontextPush(a,b,c
1fe20 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1fe30 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
1fe40 28 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29  (a)  ((void)(a))
1fe50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
1fe60 69 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65  ite3Attach(Parse
1fe70 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  *, Expr*, Expr*,
1fe80 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
1fe90 6c 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73  lite3Detach(Pars
1fea0 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
1feb0 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28   sqlite3FixInit(
1fec0 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a  DbFixer*, Parse*
1fed0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
1fee0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
1fef0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
1ff00 78 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72  xSrcList(DbFixer
1ff10 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1ff20 74 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65  t sqlite3FixSele
1ff30 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c  ct(DbFixer*, Sel
1ff40 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
1ff50 65 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65  e3FixExpr(DbFixe
1ff60 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
1ff70 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69  sqlite3FixExprLi
1ff80 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  st(DbFixer*, Exp
1ff90 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
1ffa0 69 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74  ite3FixTriggerSt
1ffb0 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69  ep(DbFixer*, Tri
1ffc0 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20  ggerStep*);.int 
1ffd0 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73  sqlite3AtoF(cons
1ffe0 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c  t char *z, doubl
1fff0 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  e*, int, u8);.in
20000 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33  t sqlite3GetInt3
20010 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  2(const char *, 
20020 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
20030 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61  e3Atoi(const cha
20040 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
20050 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e  Utf16ByteLen(con
20060 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20  st void *pData, 
20070 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20  int nChar);.int 
20080 73 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c  sqlite3Utf8CharL
20090 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70  en(const char *p
200a0 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29  Data, int nByte)
200b0 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66  ;.u32 sqlite3Utf
200c0 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a  8Read(const u8**
200d0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
200e0 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f  3LogEst(u64);.Lo
200f0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
20100 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67  stAdd(LogEst,Log
20110 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Est);.#ifndef SQ
20120 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
20130 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71  LTABLE.LogEst sq
20140 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44  lite3LogEstFromD
20150 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23  ouble(double);.#
20160 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65  endif.u64 sqlite
20170 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67  3LogEstToInt(Log
20180 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  Est);../*.** Rou
20190 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e  tines to read an
201a0 64 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65  d write variable
201b0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
201c0 2e 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  .  These used to
201d0 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c  .** be defined l
201e0 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20  ocally, but now 
201f0 77 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e  we use the varin
20200 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68  t routines in th
20210 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65  e util.c.** file
20220 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75  .  Code should u
20230 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72  se the MACRO for
20240 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65  ms below, as the
20250 20 56 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f   Varint32 versio
20260 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20  ns.** are coded 
20270 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73 69  to assume the si
20280 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65 20 69  ngle byte case i
20290 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65  s already handle
202a0 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65  d (which .** the
202b0 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73   MACRO form does
202c0 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  )..*/.int sqlite
202d0 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67  3PutVarint(unsig
202e0 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b  ned char*, u64);
202f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
20300 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64  arint32(unsigned
20310 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38   char*, u32);.u8
20320 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
20330 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
20340 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
20350 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
20360 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
20370 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
20380 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
20390 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
203a0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65  );../*.** The he
203b0 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64  ader of a record
203c0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
203d0 65 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65  equence variable
203e0 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73  -length integers
203f0 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67  ..** These integ
20400 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  ers are almost a
20410 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20  lways small and 
20420 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61  are encoded as a
20430 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a   single byte..**
20440 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
20450 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e  acros take advan
20460 74 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74  tage this fact t
20470 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74  o provide a fast
20480 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64   encode.** and d
20490 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74  ecode of the int
204a0 65 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72  egers in a recor
204b0 64 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73  d header.  It is
204c0 20 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20   faster for the 
204d0 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77  common.** case w
204e0 68 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72  here the integer
204f0 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74   is a single byt
20500 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74  e.  It is a litt
20510 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74  le slower when t
20520 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73  he.** integer is
20530 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74   two or more byt
20540 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c  es.  But overall
20550 20 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a   it is faster..*
20560 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
20570 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61  ng expressions a
20580 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a  re equivalent:.*
20590 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c  *.**     x = sql
205a0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
205b0 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20   A, &B );.**    
205c0 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56   x = sqlite3PutV
205d0 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b  arint32( A, B );
205e0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67  .**.**     x = g
205f0 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  etVarint32( A, B
20600 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70   );.**     x = p
20610 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42  utVarint32( A, B
20620 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e   );.**.*/.#defin
20630 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
20640 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
20650 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
20660 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
20670 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
20680 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
20690 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
206a0 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
206b0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
206c0 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
206d0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
206e0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
206f0 74 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 28  te3PutVarint32((
20700 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
20710 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
20720 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
20730 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
20740 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
20750 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
20760 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
20770 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20  ffinityStr(Vdbe 
20780 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69  *, Index *);.voi
20790 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
207a0 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a  finityStr(Vdbe *
207b0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61 72  , Table *);.char
207c0 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
207d0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
207e0 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
207f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
20800 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
20810 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
20820 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
20830 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
20840 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
20850 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
20860 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
20870 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
20880 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
20890 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20 69  rror(sqlite3*, i
208a0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
208b0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  ...);.void *sqli
208c0 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c  te3HexToBlob(sql
208d0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
208e0 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38  r *z, int n);.u8
208f0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
20900 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c  (int h);.int sql
20910 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28  ite3TwoPartName(
20920 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
20930 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
20940 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e   **);..#if defin
20950 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
20960 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
20970 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
20980 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
20990 5f 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 29  _DEBUG_OS_TRACE)
209a0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
209b0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
209c0 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
209d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
209e0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
209f0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
20a00 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
20a10 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
20a20 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
20a30 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
20a40 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
20a50 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
20a60 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
20a70 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
20a80 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
20a90 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
20aa0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
20ab0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
20ac0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
20ad0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20ae0 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
20af0 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54  pParse, Expr*, T
20b00 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71  oken*);.Expr *sq
20b10 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
20b20 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a  ateString(Parse*
20b30 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61  ,Expr*,const cha
20b40 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
20b50 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74  e3ExprSkipCollat
20b60 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  e(Expr*);.int sq
20b70 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65  lite3CheckCollSe
20b80 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53  q(Parse *, CollS
20b90 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  eq *);.int sqlit
20ba0 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d  e3CheckObjectNam
20bb0 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74  e(Parse *, const
20bc0 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73   char *);.void s
20bd0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
20be0 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20  nges(sqlite3 *, 
20bf0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20c00 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69  3AddInt64(i64*,i
20c10 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
20c20 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  SubInt64(i64*,i6
20c30 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  4);.int sqlite3M
20c40 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ulInt64(i64*,i64
20c50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62  );.int sqlite3Ab
20c60 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66  sInt32(int);.#if
20c70 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
20c80 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64  E_8_3_NAMES.void
20c90 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66   sqlite3FileSuff
20ca0 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ix3(const char*,
20cb0 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23   char*);.#else.#
20cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46   define sqlite3F
20cd0 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a  ileSuffix3(X,Y).
20ce0 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65  #endif.u8 sqlite
20cf0 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
20d00 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a  t char *z,int);.
20d10 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
20d20 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
20d30 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
20d40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
20d50 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
20d60 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
20d70 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
20d80 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
20d90 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
20da0 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20   void *,u8, .   
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
20dd0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
20de0 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
20df0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
20e00 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
20e10 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
20e20 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
20e30 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
20e40 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
20e50 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
20e60 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
20e70 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
20e80 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
20e90 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
20ea0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
20eb0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
20ec0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
20ed0 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
20ee0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
20ef0 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
20f00 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
20f10 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
20f20 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
20f30 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
20f40 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
20f50 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
20f60 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
20f70 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
20f80 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
20f90 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
20fa0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
20fb0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
20fc0 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
20fd0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
20fe0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
20ff0 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46  ern SQLITE_WSD F
21000 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
21010 65 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e  e3GlobalFunction
21020 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
21030 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
21040 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
21050 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
21060 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
21070 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
21080 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
21090 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
210a0 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
210b0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
210c0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
210d0 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
210e0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
210f0 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
21100 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
21110 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
21120 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
21130 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
21140 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
21150 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
21160 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
21170 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
21180 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
21190 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
211a0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
211b0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
211c0 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
211d0 74 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  t(Parse *, Expr 
211e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
211f0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
21200 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
21210 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
21220 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
21230 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
21240 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
21250 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
21260 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
21270 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
21280 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
21290 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
212a0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
212b0 33 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61  3ResolveSelectNa
212c0 6d 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  mes(Parse*, Sele
212d0 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
212e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
212f0 52 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72  ResolveSelfRefer
21300 65 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  ence(Parse*,Tabl
21310 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70  e*,int,Expr*,Exp
21320 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
21330 69 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72  ite3ResolveOrder
21340 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20  GroupBy(Parse*, 
21350 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73  Select*, ExprLis
21360 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
21370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
21380 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65  lumnDefault(Vdbe
21390 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74   *, Table *, int
213a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
213b0 69 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41  ite3AlterFinishA
213c0 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a  ddColumn(Parse *
213d0 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64  , Token *);.void
213e0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67   sqlite3AlterBeg
213f0 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  inAddColumn(Pars
21400 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b  e *, SrcList *);
21410 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
21420 33 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73  3GetCollSeq(Pars
21430 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20  e*, u8, CollSeq 
21440 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21450 0a 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66  .char sqlite3Aff
21460 69 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20  inityType(const 
21470 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69  char*, u8*);.voi
21480 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
21490 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
214a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
214b0 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
214c0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
214d0 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  er*);.int sqlite
214e0 33 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a  3FindDb(sqlite3*
214f0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
21500 71 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65  qlite3FindDbName
21510 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
21520 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73  t char *);.int s
21530 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f  qlite3AnalysisLo
21540 61 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  ad(sqlite3*,int 
21550 69 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  iDB);.void sqlit
21560 65 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d  e3DeleteIndexSam
21570 70 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e  ples(sqlite3*,In
21580 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
21590 74 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74  te3DefaultRowEst
215a0 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  (Index*);.void s
215b0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
215c0 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69  keFunctions(sqli
215d0 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
215e0 73 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e  sqlite3IsLikeFun
215f0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45  ction(sqlite3*,E
21600 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29  xpr*,int*,char*)
21610 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69  ;.void sqlite3Mi
21620 6e 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28  nimumFileFormat(
21630 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
21640 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21650 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20  chemaClear(void 
21660 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69  *);.Schema *sqli
21670 74 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c  te3SchemaGet(sql
21680 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29  ite3 *, Btree *)
21690 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68  ;.int sqlite3Sch
216a0 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74  emaToIndex(sqlit
216b0 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a  e3 *db, Schema *
216c0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
216d0 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28  te3KeyInfoAlloc(
216e0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 4b  sqlite3*,int);.K
216f0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 49  eyInfo *sqlite3I
21700 6e 64 65 78 4b 65 79 69 6e 66 6f 28 50 61 72 73  ndexKeyinfo(Pars
21710 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 69  e *, Index *);.i
21720 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
21730 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
21740 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
21750 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20  t, int, void *, 
21760 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  .  void (*)(sqli
21770 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
21780 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  ,sqlite3_value *
21790 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73  *),.  void (*)(s
217a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
217b0 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
217c0 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28  e **), void (*)(
217d0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
217e0 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63  ),.  FuncDestruc
217f0 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
21800 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  .);.int sqlite3A
21810 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a  piExit(sqlite3 *
21820 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  db, int);.int sq
21830 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74  lite3OpenTempDat
21840 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a  abase(Parse *);.
21850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
21860 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63  AccumInit(StrAcc
21870 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c  um*, char*, int,
21880 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21890 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
218a0 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  d(StrAccum*,cons
218b0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f  t char*,int);.vo
218c0 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64  id sqlite3Append
218d0 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a 2c  Space(StrAccum*,
218e0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
218f0 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
21900 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
21910 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
21920 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
21930 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21940 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
21950 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
21960 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
21970 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
21980 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
21990 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
219a0 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
219b0 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
219c0 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
219d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
219e0 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
219f0 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
21a00 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
21a10 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21a20 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
21a30 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
21a40 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
21a50 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
21a60 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
21a70 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49 6e  tValue(Parse*,In
21a80 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
21a90 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c 69  ord**,Expr*,u8,i
21aa0 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  nt,int*);.void s
21ab0 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65  qlite3Stat4Probe
21ac0 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63  Free(UnpackedRec
21ad0 6f 72 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ord*);.#endif../
21ae0 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
21af0 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
21b00 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
21b10 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
21b20 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69  3ParserAlloc(voi
21b30 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b 0a  d*(*)(size_t));.
21b40 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
21b50 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
21b60 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
21b70 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
21b80 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
21b90 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
21ba0 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
21bb0 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
21bc0 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
21bd0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
21be0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
21bf0 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
21c00 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
21c10 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
21c20 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
21c30 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
21c40 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
21c50 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
21c60 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21c70 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
21c80 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
21c90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21ca0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
21cb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
21cc0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
21cd0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
21ce0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
21cf0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
21d00 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
21d10 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
21d20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
21d30 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
21d40 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
21d50 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
21d60 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
21d70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
21d80 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
21d90 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
21da0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
21db0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
21dc0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
21dd0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
21de0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
21df0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
21e00 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
21e10 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
21e20 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
21e30 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21e40 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66 69  Lock(X) .#  defi
21e50 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
21e60 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  lock(X).#  defin
21e70 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
21e80 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65  ockList(X).#  de
21e90 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
21ea0 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20  Savepoint(X, Y, 
21eb0 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Z) SQLITE_OK.#  
21ec0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65  define sqlite3Ge
21ed0 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28  tVTable(X,Y)  ((
21ee0 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65  VTable*)0).#else
21ef0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
21f00 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65  VtabClear(sqlite
21f10 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a  3 *db, Table*);.
21f20 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
21f30 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71  tabDisconnect(sq
21f40 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
21f50 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c   *p);.   int sql
21f60 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c  ite3VtabSync(sql
21f70 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29  ite3 *db, Vdbe*)
21f80 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
21f90 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c  VtabRollback(sql
21fa0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e  ite3 *db);.   in
21fb0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  t sqlite3VtabCom
21fc0 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  mit(sqlite3 *db)
21fd0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
21fe0 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65  3VtabLock(VTable
21ff0 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
22000 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56  ite3VtabUnlock(V
22010 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69  Table *);.   voi
22020 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  d sqlite3VtabUnl
22030 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a  ockList(sqlite3*
22040 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
22050 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73  3VtabSavepoint(s
22060 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69  qlite3 *, int, i
22070 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  nt);.   void sql
22080 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
22090 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69  rmsg(Vdbe*, sqli
220a0 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56  te3_vtab*);.   V
220b0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65  Table *sqlite3Ge
220c0 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  tVTable(sqlite3*
220d0 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64 65  , Table*);.#  de
220e0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
220f0 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
22100 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
22110 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
22120 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
22130 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
22140 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
22150 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22160 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
22170 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
22180 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
22190 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
221a0 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
221b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
221c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
221d0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
221e0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
221f0 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
22200 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
22210 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
22220 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
22230 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
22240 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
22250 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
22260 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
22270 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
22280 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
22290 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
222a0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
222b0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
222c0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
222d0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
222e0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
222f0 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
22300 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
22310 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
22320 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
22330 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
22340 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
22350 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
22360 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
22370 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
22380 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
22390 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
223a0 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
223b0 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
223c0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
223d0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
223e0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
223f0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
22400 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
22410 33 5f 73 74 6d 74 20 2a 29 3b 0a 69 6e 74 20 73  3_stmt *);.int s
22420 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
22430 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
22440 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
22450 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
22460 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
22470 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
22480 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
22490 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
224a0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
224b0 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
224c0 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
224d0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
224e0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
224f0 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
22500 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
22510 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
22520 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
22530 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
22540 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
22550 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
22560 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
22570 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
22580 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
22590 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  *,int);.#endif..
225a0 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  /* Declarations 
225b0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e  for functions in
225c0 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20   fkey.c. All of 
225d0 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61 63  these are replac
225e0 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d  ed by.** no-op m
225f0 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f  acros if OMIT_FO
22600 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65 66  REIGN_KEY is def
22610 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ined. In this ca
22620 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a  se no foreign.**
22630 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69   key functionali
22640 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e  ty is available.
22650 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45 52   If OMIT_TRIGGER
22660 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74 0a   is defined but.
22670 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  ** OMIT_FOREIGN_
22680 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79  KEY is not, only
22690 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   some of the fun
226a0 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70  ctions are no-op
226b0 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63  ed. In.** this c
226c0 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ase foreign keys
226d0 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75 74   are parsed, but
226e0 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74 69   no other functi
226f0 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a 20 70  onality is .** p
22700 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
22710 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
22720 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
22730 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
22740 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
22750 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
22760 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
22770 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
22780 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
22790 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
227a0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
227b0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
227c0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
227d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
227e0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
227f0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
22800 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
22810 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
22820 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
22830 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
22840 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
22850 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
22860 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
22870 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
22880 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
22890 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
228a0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
228b0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
228c0 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
228d0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
228e0 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
228f0 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
22900 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
22910 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
22920 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22930 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
22940 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
22950 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
22960 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
22970 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
22980 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
22990 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23  d)    0.#endif.#
229a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
229b0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
229c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
229d0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
229e0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
229f0 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
22a00 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
22a10 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
22a20 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
22a30 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
22a40 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
22a50 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
22a60 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
22a70 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
22a80 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
22a90 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
22aa0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
22ab0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
22ac0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
22ad0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
22ae0 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
22af0 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
22b00 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
22b10 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
22b20 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
22b30 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
22b40 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
22b50 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
22b60 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
22b70 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
22b80 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
22b90 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  t if SQLITE_OMIT
22ba0 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a  _BUILTIN_TEST.**
22bb0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
22bc0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
22bd0 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f  TE_OMIT_BUILTIN_
22be0 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  TEST.  void sqli
22bf0 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
22c00 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f  lloc(void);.  vo
22c10 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  id sqlite3EndBen
22c20 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b  ignMalloc(void);
22c30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
22c40 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
22c50 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64  ignMalloc().  #d
22c60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64  efine sqlite3End
22c70 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23  BenignMalloc().#
22c80 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65 20 49  endif..#define I
22c90 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
22ca0 20 20 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e          1.#defin
22cb0 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
22cc0 20 20 20 20 20 20 20 20 20 20 20 32 0a 23 64 65             2.#de
22cd0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
22ce0 44 45 58 5f 41 53 43 20 20 20 20 20 20 20 33 0a  DEX_ASC       3.
22cf0 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
22d00 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 20 20  _INDEX_DESC     
22d10 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69   4.int sqlite3Fi
22d20 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
22d30 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2a 29  *, Expr *, int*)
22d40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
22d50 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
22d60 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
22d70 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
22d80 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
22d90 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
22da0 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
22db0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
22dc0 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
22dd0 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 20  qlite3_vfs *);. 
22de0 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
22df0 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
22e00 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69 6e 74  3_file *);.  int
22e10 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45   sqlite3JournalE
22e20 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f 66 69  xists(sqlite3_fi
22e30 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a 20 20  le *p);.#else.  
22e40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a  #define sqlite3J
22e50 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66 73 29  ournalSize(pVfs)
22e60 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73 46 69   ((pVfs)->szOsFi
22e70 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  le).  #define sq
22e80 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73  lite3JournalExis
22e90 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66 0a 0a  ts(p) 1.#endif..
22ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a  void sqlite3MemJ
22eb0 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
22ec0 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e 74 20  e3_file *);.int 
22ed0 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61  sqlite3MemJourna
22ee0 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69 6e 74  lSize(void);.int
22ef0 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a 6f 75   sqlite3IsMemJou
22f00 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66 69 6c  rnal(sqlite3_fil
22f10 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c 49 54  e *);..#if SQLIT
22f20 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
22f30 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  >0.  void sqlite
22f40 33 45 78 70 72 53 65 74 48 65 69 67 68 74 28 50  3ExprSetHeight(P
22f50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
22f60 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20 73 71  pr *p);.  int sq
22f70 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
22f80 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
22f90 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
22fa0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
22fb0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
22fc0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
22fd0 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
22fe0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
22ff0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
23000 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
23010 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
23020 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
23030 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
23040 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
23050 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
23060 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
23070 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
23080 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
23090 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
230a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
230b0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
230c0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
230d0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
230e0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
230f0 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
23100 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
23110 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
23120 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
23130 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
23140 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
23150 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
23160 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23170 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
23180 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
23190 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
231a0 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
231b0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
231c0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
231d0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
231e0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
231f0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
23200 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
23210 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
23220 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
23230 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
23240 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
23250 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
23260 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
23270 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
23280 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
23290 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a 2f 0a  g messages. .*/.
232a0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
232b0 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
232c0 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
232d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
232e0 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
232f0 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
23300 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
23310 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
23320 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76  .SQLITE_EXTERN v
23330 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49 6f 54  oid (*sqlite3IoT
23340 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
23350 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
23360 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
23370 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
23380 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
23390 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
233a0 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
233b0 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
233c0 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
233d0 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
233e0 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
233f0 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
23400 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
23410 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
23420 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
23430 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
23440 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
23450 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
23460 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
23470 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
23480 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
23490 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
234a0 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
234b0 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
234c0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
234d0 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
234e0 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
234f0 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
23500 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
23510 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
23520 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
23530 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
23540 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
23550 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
23560 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
23570 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
23580 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
23590 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
235a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
235b0 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
235c0 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
235d0 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
235e0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
235f0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
23600 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
23610 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
23620 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
23630 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
23640 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
23650 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
23660 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
23670 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
23680 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
23690 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
236a0 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
236b0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
236c0 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
236d0 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
236e0 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
236f0 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
23700 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
23710 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
23720 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
23730 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
23740 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
23750 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
23760 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
23770 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
23780 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
23790 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
237a0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
237b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
237c0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
237d0 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
237e0 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
237f0 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
23800 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
23810 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
23820 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
23830 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
23840 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
23850 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
23860 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
23870 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
23880 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
23890 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  int. .**.** All 
238a0 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
238b0 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
238c0 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
238d0 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
238e0 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
238f0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
23900 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
23910 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
23920 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
23930 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
23940 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
23950 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
23960 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
23970 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
23980 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
23990 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
239a0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
239b0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
239c0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
239d0 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
239e0 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
239f0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
23a00 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
23a10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
23a20 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
23a30 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
23a40 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
23a50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
23a60 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
23a70 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
23a80 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
23a90 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
23aa0 4d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  Might have been 
23ab0 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79  lookaside memory
23ac0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
23ad0 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
23ae0 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
23af0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
23b00 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
23b10 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
23b20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
23b30 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
23b40 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44 42 20  fine MEMTYPE_DB 
23b50 20 20 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a          0x10  /*
23b60 20 55 73 65 73 20 73 71 6c 69 74 65 33 44 62 4d   Uses sqlite3DbM
23b70 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c 69 74  alloc, not sqlit
23b80 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e  e_malloc */..#en
23b90 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45 49 4e  dif /* _SQLITEIN
23ba0 54 5f 48 5f 20 2a 2f 0a                          T_H_ */.