/ Hex Artifact Content
Login

Artifact dad3dff932c055304fc75b339f2cf68aab9cf19e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 6e 63 6c  ite..**.*/.#incl
01b0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
01c0: 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 49  #ifndef _SQLITEI
01d0: 4e 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53  NT_H_.#define _S
01e0: 51 4c 49 54 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a  QLITEINT_H_../*.
01f0: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0200: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0210: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0220: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
0230: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
0240: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0250: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
0260: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
0270: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
0280: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0290: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
02a0: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
02b0: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
02c0: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
02d0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
02e0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
02f0: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0300: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0310: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0320: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0330: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0340: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0350: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0360: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0370: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0380: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0390: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
03a0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
03b0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
03c0: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
03d0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
03e0: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
03f0: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0400: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0410: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0420: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0430: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0440: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0450: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0460: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0470: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0480: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0490: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
04a0: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
04b0: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
04c0: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
04d0: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
04e0: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
04f0: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0500: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0510: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0520: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0530: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0540: 53 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72  S..**.** Similar
0550: 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63   is true for Mac
0560: 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f   OS X.  LFS is o
0570: 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  nly supported on
0580: 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20   Mac OS X 9 and 
0590: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05a0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
05b0: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
05c0: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
05d0: 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45  1.# ifndef _FILE
05e0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20  _OFFSET_BITS.#  
05f0: 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46   define _FILE_OF
0600: 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65  FSET_BITS 64.# e
0610: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c  ndif.# define _L
0620: 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20  ARGEFILE_SOURCE 
0630: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0640: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
0650: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
0660: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
0670: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
0680: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
0690: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
06a0: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
06b0: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
06c0: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
06d0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
06e0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
06f0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
0700: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
0710: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
0720: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
0730: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
0740: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
0750: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
0760: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
0770: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
0780: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
0790: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
07b0: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
07c0: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
07d0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
07e0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
07f0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
0800: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
0810: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
0820: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
0830: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
0840: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
0850: 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72  f../* Needed for
0860: 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74   various definit
0870: 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64  ions... */.#ifnd
0880: 65 66 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ef _GNU_SOURCE.#
0890: 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55   define _GNU_SOU
08a0: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  RCE.#endif..#if 
08b0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
08c0: 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  D__) && !defined
08d0: 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20  (_BSD_SOURCE).# 
08e0: 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52  define _BSD_SOUR
08f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
0900: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
0910: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
0920: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
0930: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
0940: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
0950: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
0960: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
0970: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
0980: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
0990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
09a0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
09b0: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
09c0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
09d0: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
09e0: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
09f0: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
0a00: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
0a10: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
0a20: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
0a30: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
0a40: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
0a50: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
0a60: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
0a70: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
0a80: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
0a90: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
0aa0: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
0ab0: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
0ac0: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
0ad0: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
0ae0: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
0af0: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
0b00: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
0b10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0b20: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0b30: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
0b40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
0b50: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
0b60: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
0b70: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
0b80: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
0b90: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0ba0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0bb0: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
0bc0: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
0bd0: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
0be0: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
0bf0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0c00: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
0c10: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
0c20: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
0c30: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
0c40: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
0c50: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
0c60: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
0c70: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
0c80: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
0c90: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
0ca0: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
0cb0: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
0cc0: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
0ce0: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
0cf0: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
0d00: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
0d10: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
0d20: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
0d30: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0d40: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
0d50: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
0d60: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
0d70: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
0d80: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
0d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
0da0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
0db0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0dc0: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
0dd0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0de0: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
0df0: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
0e00: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
0e10: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
0e20: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
0e30: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
0e40: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
0e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
0e60: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
0e70: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
0e80: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
0e90: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
0ea0: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
0eb0: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
0ee0: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
0ef0: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
0f00: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
0f10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0f20: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
0f30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0f40: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0f50: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
0f60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
0f70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
0f80: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
0f90: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
0fa0: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
0fb0: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
0fc0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
0fd0: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
0fe0: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
0ff0: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1000: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1010: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
1020: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
1030: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
1040: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
1050: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1060: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
1070: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1080: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1090: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
10a0: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
10b0: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
10c0: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
10e0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
10f0: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1100: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1110: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
1120: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
1130: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
1140: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
1150: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1160: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
1170: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1180: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1190: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
11a0: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
11b0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
11c0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
11d0: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
11e0: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
11f0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1200: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1210: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1220: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1230: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1240: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1250: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1260: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1270: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1280: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1290: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
12a0: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
12b0: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
12c0: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
12d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12e0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12f0: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1300: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1310: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1320: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1330: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1340: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1350: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1360: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1370: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1380: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1390: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
13a0: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
13b0: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
13c0: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
13d0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
13e0: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
13f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1400: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1420: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1430: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1440: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1460: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1470: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1480: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1490: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
14b0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
14c0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
14d0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
14e0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
14f0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1500: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1510: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1520: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1530: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1540: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1550: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1560: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1570: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1580: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1590: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
15a0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
15b0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
15c0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
15d0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
15e0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
15f0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1600: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1610: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1620: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1630: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1640: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1650: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1660: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1670: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1680: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1690: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
16a0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
16b0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
16c0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
16d0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
16e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
16f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1700: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1710: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1720: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1730: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1740: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1750: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1760: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1770: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1780: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1790: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
17a0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17b0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
17c0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
17d0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
17e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
17f0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1800: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
1810: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
1820: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
1830: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
1840: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
1850: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1860: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1870: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
1880: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
1890: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18a0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18b0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18c0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
18d0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
18e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
18f0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
1900: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1910: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1930: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1950: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1960: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1970: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1980: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1990: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
19a0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
19b0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
19c0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
19d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
19e0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
19f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1a00: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1a10: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1a20: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1a30: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1a40: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1a50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1a60: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1a70: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1a80: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
1a90: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
1aa0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
1ab0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1ac0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1ad0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1ae0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
1af0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b00: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
1b10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
1b20: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
1b30: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
1b40: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1b50: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
1b70: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
1b80: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
1b90: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
1ba0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
1bb0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
1bc0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
1bd0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
1be0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
1bf0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
1c00: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
1c10: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
1c20: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
1c30: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
1c40: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
1c50: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
1c60: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
1c70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1c80: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1c90: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
1ca0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
1cb0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
1cc0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
1cd0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
1ce0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
1cf0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
1d00: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
1d10: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
1d20: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
1d30: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
1d40: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
1d50: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
1d60: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
1d70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d80: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
1d90: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
1da0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
1db0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
1dc0: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
1dd0: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
1de0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
1df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
1e00: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
1e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
1e20: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
1e30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e40: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
1e50: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
1e60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1e70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
1e80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
1e90: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
1ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1eb0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ec0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1ed0: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1ee0: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1ef0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f00: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f10: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f20: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f30: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f40: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f50: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f60: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f70: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1f80: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1f90: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fa0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fb0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1fc0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
1fd0: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
1fe0: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
1ff0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2000: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2010: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2020: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2030: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2040: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2050: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2060: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2070: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2080: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2090: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20a0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20b0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20c0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
20d0: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
20e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
20f0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2100: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2110: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2120: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2130: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2140: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2150: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2160: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2170: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2180: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2190: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21a0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21b0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21c0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
21d0: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
21e0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
21f0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2200: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2210: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2220: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2230: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2240: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2250: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2260: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2270: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2280: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2290: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22a0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22b0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
22d0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
22e0: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
22f0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2300: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2310: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2320: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2330: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2340: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2350: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2360: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2370: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2380: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2390: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23a0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23b0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23c0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
23d0: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
23e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23f0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2400: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2410: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2420: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2430: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2440: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2450: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2460: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2470: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2480: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2490: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24a0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24b0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24c0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
24d0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
24e0: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
24f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2500: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2510: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2520: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2530: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2540: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2550: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2560: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2570: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2580: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2590: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25a0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25b0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25c0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
25d0: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
25e0: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
25f0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2600: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2610: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2620: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2630: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2640: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2650: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2660: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2670: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2680: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2690: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26a0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26b0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26c0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
26d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
26e0: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
26f0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2700: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2710: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2720: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2730: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2740: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2750: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2760: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2770: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2780: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2790: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
27a0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27b0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27c0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
27d0: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
27e0: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
27f0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2800: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2810: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2820: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2830: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2840: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2850: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2860: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2870: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2880: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2890: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28a0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28b0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28c0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
28d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
28e0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
28f0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2900: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2910: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2920: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2930: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2940: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2950: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2960: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2970: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2980: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2990: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29a0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29c0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
29d0: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
29e0: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
29f0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a00: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a10: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a20: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a40: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a50: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a60: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2a70: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2a80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2a90: 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20  e.  These hints 
2aa0: 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65  could,.** in the
2ab0: 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20  ory, be used by 
2ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  the compiler to 
2ad0: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2ae0: 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72  code, but.** cur
2af0: 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20  rently they are 
2b00: 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  just comments fo
2b10: 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e  r human readers.
2b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65  .*/.#define like
2b30: 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65  ly(X)    (X).#de
2b40: 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  fine unlikely(X)
2b50: 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20    (X)..#include 
2b60: 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64  "hash.h".#includ
2b70: 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63  e "parse.h".#inc
2b80: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
2b90: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
2ba0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
2bb0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
2bc0: 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c  <assert.h>.#incl
2bd0: 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a  ude <stddef.h>..
2be0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69  /*.** If compili
2bf0: 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73  ng for a process
2c00: 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c  or that lacks fl
2c10: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70  oating point sup
2c20: 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74  port,.** substit
2c30: 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ute integer for 
2c40: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a  floating-point.*
2c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
2c70: 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75  INT.# define dou
2c80: 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ble sqlite_int64
2c90: 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20  .# define float 
2ca0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
2cb0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
2cc0: 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74  _TYPE sqlite_int
2cd0: 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49  64.# ifndef SQLI
2ce0: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64  TE_BIG_DBL.#   d
2cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2d00: 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f  _DBL (((sqlite3_
2d10: 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20  int64)1)<<50).# 
2d20: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
2d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
2d40: 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65  IME_FUNCS 1.# de
2d50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2d60: 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66  _TRACE 1.# undef
2d70: 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e   SQLITE_MIXED_EN
2d80: 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54  DIAN_64BIT_FLOAT
2d90: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2da0: 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69  HAVE_ISNAN.#endi
2db0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2dc0: 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e  _BIG_DBL.# defin
2dd0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
2de0: 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a   (1e99).#endif..
2df0: 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44  /*.** OMIT_TEMPD
2e00: 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66  B is set to 1 if
2e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2e20: 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20  PDB is defined, 
2e30: 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72  or 0.** afterwar
2e40: 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d  d. Having this m
2e50: 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  acro allows us t
2e60: 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f  o cause the C co
2e70: 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d  mpiler .** to om
2e80: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
2e90: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
2ea0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
2eb0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
2ec0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2ed0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
2ee0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
2ef0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
2f00: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
2f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
2f20: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
2f30: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
2f40: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
2f50: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
2f60: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
2f70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
2f80: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
2f90: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
2fa0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
2fb0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
2fc0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
2fd0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
2fe0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
2ff0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
3000: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
3010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3020: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
3030: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
3040: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3050: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
3060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3070: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
3080: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
3090: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
30a0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
30b0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
30c0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
30d0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
30e0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
30f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
3100: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3110: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
3120: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3130: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3140: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
3150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
3160: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
3170: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
3180: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
3190: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
31a0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
31b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
31c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
31d0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
31e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
31f0: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
3210: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
3220: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
3240: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
3250: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
3260: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
3270: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
3280: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
3290: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
32a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
32b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
32c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
32d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
32e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
32f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
3300: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
3310: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
3320: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
3330: 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  /.#define MIN(A,
3340: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
3350: 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58  (B)).#define MAX
3360: 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28  (A,B) ((A)>(B)?(
3370: 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43  A):(B))../*.** C
3380: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3390: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
33a0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
33b0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
33c0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
33d0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
33e0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
33f0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3400: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3410: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3420: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3430: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3440: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3450: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3460: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3470: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3480: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3490: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
34a0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
34b0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
34c0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
34d0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
34e0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
34f0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
3500: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
3510: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
3520: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
3530: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
3540: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
3550: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
3560: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
3570: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3580: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
3590: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
35a0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
35b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
35c0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
35d0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
35e0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
35f0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3600: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
3610: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
3620: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
3630: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3640: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
3650: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3660: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3670: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
3680: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
3690: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
36a0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
36b0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
36c0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
36d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
36e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
36f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3700: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
3710: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
3720: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
3730: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3740: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
3750: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3760: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
3770: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3780: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
3790: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
37c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
37d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
37e0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
37f0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3800: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
3810: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
3820: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
3830: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
3840: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
3850: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
3860: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
3870: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
3880: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
3890: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
38a0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
38b0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
38c0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
38d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
38e0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
38f0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
3900: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
3910: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3920: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
3930: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
3940: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
3950: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3960: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
3970: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
3980: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
3990: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
39a0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
39b0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
39c0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
39d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
39e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
39f0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
3a00: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
3a10: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
3a20: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
3a30: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
3a40: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
3a50: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
3a60: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
3a70: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
3a80: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
3a90: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
3aa0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
3ab0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
3ac0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
3ad0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
3ae0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
3af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b00: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
3b10: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
3b20: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
3b30: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
3b40: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
3b50: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
3b60: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
3b70: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
3b80: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3b90: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
3ba0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
3bb0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
3bc0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
3bd0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
3be0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
3bf0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
3c00: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
3c10: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
3c20: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
3c30: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
3c40: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
3c50: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
3c60: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
3c70: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
3c80: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
3c90: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
3ca0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
3cb0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3cc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
3cd0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
3ce0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
3cf0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
3d00: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
3d10: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
3d20: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
3d30: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
3d40: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
3d50: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
3d60: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
3d70: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
3d80: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
3d90: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
3da0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
3db0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
3dc0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
3dd0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
3de0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
3df0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
3e00: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
3e10: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
3e20: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
3e30: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
3e40: 45 73 74 20 71 75 61 6e 74 61 74 69 74 65 73 20  Est quantatites 
3e50: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
3e60: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
3e70: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
3e80: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
3e90: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
3ea0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
3eb0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
3ec0: 20 22 4c 6f 67 61 72 69 74 68 69 6d 69 63 20 45   "Logarithimic E
3ed0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
3ee0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
3ef0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
3f00: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
3f10: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
3f20: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
3f30: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
3f40: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
3f50: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
3f60: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
3f70: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
3f80: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
3f90: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
3fa0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
3fb0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
3fc0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
3fd0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
3fe0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
3ff0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
4000: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
4010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
4020: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
4030: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
4040: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
4050: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
4060: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
4070: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
4080: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
4090: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
40a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
40b0: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
40c0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
40d0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
40e0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
40f0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
4100: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
4110: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
4120: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4130: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4140: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4150: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4160: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4170: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4180: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
4190: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
41a0: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
41b0: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
41e0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
41f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
4200: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
4210: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4220: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4230: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4250: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4260: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
4270: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
4280: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4290: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
42a0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
42b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
42c0: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
42d0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
42e0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
42f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4300: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4310: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4320: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4330: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4340: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4350: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4360: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4370: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4380: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4390: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
43a0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
43b0: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
43c0: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
43d0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
43e0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
43f0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4400: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4410: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4420: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4430: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4440: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4450: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4460: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4470: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4480: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4490: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
44a0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
44b0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
44c0: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
44d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
44e0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
44f0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4500: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4510: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4520: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4530: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4540: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4550: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4560: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4570: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4580: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4590: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
45a0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
45b0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
45c0: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
45d0: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
45e0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
45f0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
4600: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
4610: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4620: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
4630: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
4640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
4650: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
4660: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
4670: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
4680: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
4690: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
46a0: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
46b0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
46c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
46d0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
46e0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
46f0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4700: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
4710: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
4720: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
4730: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
4740: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
4750: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
4760: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
4780: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
4790: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
47a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
47b0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
47c0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
47d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
47e0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
47f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4800: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
4810: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4820: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
4830: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
4840: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
4850: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
4860: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
4870: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
4880: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
4890: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
48a0: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
48b0: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
48c0: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
48d0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
48e0: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
48f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4900: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
4910: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4920: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
4930: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
4940: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
4950: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
4960: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
4970: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
4980: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
4990: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
49a0: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
49b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
49c0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
49d0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
49e0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
49f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4a00: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
4a10: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
4a20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4a30: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
4a40: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4a50: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4a60: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
4a70: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
4a80: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
4a90: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
4aa0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
4ab0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
4ac0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
4ad0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
4ae0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
4af0: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
4b00: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
4b10: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
4b20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
4b30: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4b50: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
4b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4b70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
4b80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
4b90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
4ba0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4bc0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
4bd0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
4be0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4bf0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
4c00: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4c10: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
4c20: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4c30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
4c40: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
4c50: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
4c60: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
4c70: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
4c80: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
4c90: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
4ca0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
4cb0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
4cc0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
4cd0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
4ce0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4cf0: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
4d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4d50: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
4d60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4d70: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
4d80: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4d90: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
4da0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4db0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
4dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4dd0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
4de0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
4df0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4e10: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4e20: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4e30: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4e40: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
4e50: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
4e60: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
4e70: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
4e80: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
4e90: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
4ea0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4eb0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4ec0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4ed0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4ee0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4ef0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4f00: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4f10: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4f20: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4f30: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4f40: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
4f50: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
4f60: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
4f70: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
4f80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4f90: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
4fa0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4fb0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4fc0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4fd0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4fe0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4ff0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5000: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5010: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5020: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5030: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5040: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5050: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5060: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5070: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5080: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5090: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
50a0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
50b0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
50c0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
50d0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
50e0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
50f0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5100: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5110: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5120: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5130: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5140: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5150: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5160: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5170: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5180: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5190: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
51b0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
51c0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
51d0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
51e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
51f0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5200: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5210: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5220: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5230: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5240: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5250: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5260: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5270: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5280: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5290: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
52a0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
52b0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
52c0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
52d0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
52e0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
52f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5300: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5310: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5320: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5330: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5340: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5350: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5360: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5370: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5380: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5390: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
53a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
53b0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
53c0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
53d0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
53e0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
53f0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5400: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5410: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5420: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5430: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5440: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5450: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5460: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5470: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5480: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5490: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
54a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
54b0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
54c0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
54d0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
54e0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
54f0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5500: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5510: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5520: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5530: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5540: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5550: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5560: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5570: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5580: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5590: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
55a0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
55b0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
55c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
55d0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
55e0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
55f0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5600: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5610: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5620: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5630: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5640: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
5650: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
5660: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
5670: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
5680: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
5690: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
56a0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
56b0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
56c0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
56d0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
56e0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
56f0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5700: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5710: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5720: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5730: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5740: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
5750: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
5760: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
5770: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
5780: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
5790: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
57a0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
57b0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
57c0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
57d0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
57e0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
57f0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5800: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5820: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5830: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5840: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
5850: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
5860: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
5870: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5880: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
5890: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
58a0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
58b0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
58c0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
58d0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
58e0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
58f0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5900: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5910: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5920: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5930: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5940: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
5950: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
5960: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
5970: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5980: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
5990: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
59a0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
59b0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
59c0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
59d0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
59e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
59f0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5a00: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5a10: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5a20: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5a30: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5a40: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
5a50: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
5a60: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
5a70: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
5a80: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
5a90: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
5aa0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5ab0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5ac0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5ad0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5ae0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5af0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5b00: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5b10: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5b20: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5b30: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5b40: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
5b50: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
5b60: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
5b70: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
5b90: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
5ba0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5bb0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5bc0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5bd0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5be0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5bf0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5c00: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5c10: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5c20: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5c30: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5c40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
5c50: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
5c60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
5c70: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
5c80: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
5c90: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
5ca0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5cb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5cc0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5cd0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5ce0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5cf0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5d00: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5d10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5d20: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5d30: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5d40: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
5d50: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
5d60: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
5d70: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
5d80: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
5d90: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
5da0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5db0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5dc0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5dd0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5de0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e00: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5e10: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5e20: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5e30: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5e40: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
5e50: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
5e60: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
5e70: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
5e80: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
5e90: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
5ea0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5eb0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5ec0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5ed0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5ee0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5ef0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5f00: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5f10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5f30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
5f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
5f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
5f90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
5fa0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5fc0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5fe0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5ff0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6000: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6010: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6020: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6030: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6040: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6050: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6070: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6080: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6090: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
60a0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
60b0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
60c0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
60d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
60e0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
60f0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
6100: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
6110: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6120: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
6130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
6140: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
6150: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6160: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
6170: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6180: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
6190: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
61a0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
61b0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
61c0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
61d0: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
61e0: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
61f0: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
6200: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
6210: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
6220: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
6230: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
6240: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
6250: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
6260: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
6270: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
6280: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
6290: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
62a0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
62b0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
62c0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
62d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
62e0: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
62f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
6300: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
6310: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
6320: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
6330: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
6340: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
6350: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f  ../*.** Defer so
6360: 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e  urcing vdbe.h an
6370: 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20  d btree.h until 
6380: 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61  after the "u8" a
6390: 6e 64 20 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  nd .** "BusyHand
63a0: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
63b0: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
63c0: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
63d0: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
63e0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
63f0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
6400: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
6410: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
6420: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
6430: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
6440: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
6450: 68 65 2e 68 22 0a 0a 23 69 6e 63 6c 75 64 65 20  he.h"..#include 
6460: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
6470: 22 6d 75 74 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a  "mutex.h".../*.*
6480: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
6490: 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65 73  file to be acces
64a0: 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65  sed by the syste
64b0: 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  m is an instance
64c0: 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  .** of the follo
64d0: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 20  wing structure. 
64e0: 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d 61   There are norma
64f0: 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73 65  lly two of these
6500: 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20 69   structures.** i
6510: 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44 62  n the sqlite.aDb
6520: 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b 30  [] array.  aDb[0
6530: 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  ] is the main da
6540: 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 0a  tabase file and.
6550: 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68 65  ** aDb[1] is the
6560: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
6570: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70  sed to hold temp
6580: 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 41  orary tables.  A
6590: 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74  dditional.** dat
65a0: 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61 74  abases may be at
65b0: 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  tached..*/.struc
65c0: 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a  t Db {.  char *z
65d0: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
65e0: 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64 61   Name of this da
65f0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 42 74 72 65  tabase */.  Btre
6600: 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20  e *pBt;         
6610: 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73   /* The B*Tree s
6620: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 69  tructure for thi
6630: 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  s database file 
6640: 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c  */.  u8 safety_l
6650: 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77  evel;     /* How
6660: 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20 73   aggressive at s
6670: 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64  yncing data to d
6680: 69 73 6b 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  isk */.  Schema 
6690: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
66a0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61   Pointer to data
66b0: 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73  base schema (pos
66c0: 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f  sibly shared) */
66d0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
66e0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
66f0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
6700: 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62  e stores a datab
6710: 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
6720: 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62  * Most Schema ob
6730: 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69  jects are associ
6740: 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65  ated with a Btre
6750: 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f  e.  The exceptio
6760: 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65  n is.** the Sche
6770: 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20  ma for the TEMP 
6780: 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65  databaes (sqlite
6790: 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20  3.aDb[1]) which 
67a0: 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67  is free-standing
67b0: 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63  ..** In shared c
67c0: 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e  ache mode, a sin
67d0: 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  gle Schema objec
67e0: 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20  t can be shared 
67f0: 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42  by multiple.** B
6800: 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72  trees that refer
6810: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64   to the same und
6820: 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64  erlying BtShared
6830: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20   object..** .** 
6840: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
6850: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
6860: 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65   deallocated whe
6870: 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65  n the last Btree
6880: 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e   that.** referen
6890: 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74  ces them is dest
68a0: 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d  royed.   The TEM
68b0: 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75  P Schema is manu
68c0: 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a  ally freed by.**
68d0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29   sqlite3_close()
68e0: 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20  ..*.** A thread 
68f0: 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20  must be holding 
6900: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63  a mutex on the c
6910: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72  orresponding Btr
6920: 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ee in order.** t
6930: 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20  o access Schema 
6940: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69  content.  This i
6950: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
6960: 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f  thread must also
6970: 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61   be.** holding a
6980: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71   mutex on the sq
6990: 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e  lite3 connection
69a0: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77   pointer that ow
69b0: 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a  ns the Btree..**
69c0: 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65   For a TEMP Sche
69d0: 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e  ma, only the con
69e0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73  nection mutex is
69f0: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
6a00: 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20  ruct Schema {.  
6a10: 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  int schema_cooki
6a20: 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65  e;   /* Database
6a30: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
6a40: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
6a50: 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47  file */.  int iG
6a60: 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f  eneration;     /
6a70: 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * Generation cou
6a80: 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74  nter.  Increment
6a90: 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61  ed with each cha
6aa0: 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62  nge */.  Hash tb
6ab0: 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  lHash;        /*
6ac0: 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65   All tables inde
6ad0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
6ae0: 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20   Hash idxHash;  
6af0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61        /* All (na
6b00: 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64  med) indices ind
6b10: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
6b20: 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b    Hash trigHash;
6b30: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72         /* All tr
6b40: 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62  iggers indexed b
6b50: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
6b60: 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20   fkeyHash;      
6b70: 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20   /* All foreign 
6b80: 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63  keys by referenc
6b90: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  ed table name */
6ba0: 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61  .  Table *pSeqTa
6bb0: 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73  b;      /* The s
6bc0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
6bd0: 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54  able used by AUT
6be0: 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
6bf0: 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  u8 file_format; 
6c00: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66       /* Schema f
6c10: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f  ormat version fo
6c20: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
6c30: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
6c40: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
6c50: 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74  coding used by t
6c60: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
6c70: 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20    u16 flags;    
6c80: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
6c90: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
6ca0: 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
6cb0: 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b   int cache_size;
6cc0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
6cd0: 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20  of pages to use 
6ce0: 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a  in the cache */.
6cf0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
6d00: 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
6d10: 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
6d20: 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
6d30: 6e 20 74 68 65 20 0a 2a 2a 20 44 62 2e 70 53 63  n the .** Db.pSc
6d40: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
6d50: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62  d..*/.#define Db
6d60: 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  HasProperty(D,I,
6d70: 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44  P)     (((D)->aD
6d80: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  b[I].pSchema->fl
6d90: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
6da0: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
6db0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6dc0: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
6dd0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50 29  chema->flags&(P)
6de0: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44 62  )!=0).#define Db
6df0: 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  SetProperty(D,I,
6e00: 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62 5b  P)     (D)->aDb[
6e10: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  I].pSchema->flag
6e20: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
6e30: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
6e40: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
6e50: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61  [I].pSchema->fla
6e60: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
6e70: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
6e80: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
6e90: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
6ea0: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
6eb0: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
6ec0: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
6ed0: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
6ee0: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
6ef0: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
6f00: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
6f10: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
6f20: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
6f30: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
6f40: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
6f50: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
6f60: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
6f70: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
6f80: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
6f90: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
6fa0: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
6fb0: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
6fc0: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
6fd0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
6fe0: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
6ff0: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
7000: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
7010: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
7020: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
7030: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
7040: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
7050: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
7060: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
7070: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
7080: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
7090: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
70a0: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
70b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
70c0: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
70d0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
70e0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
70f0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
7100: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
7110: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
7120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
7130: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
7140: 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
7150: 50 54 48 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f  PTH+1)../*.** Lo
7160: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69  okaside malloc i
7170: 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65 64  s a set of fixed
7180: 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74 68  -size buffers th
7190: 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  at can be used.*
71a0: 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61  * to satisfy sma
71b0: 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d  ll transient mem
71c0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72  ory allocation r
71d0: 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65  equests for obje
71e0: 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  cts.** associate
71f0: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
7200: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
7210: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73  nection.  The us
7220: 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64  e of.** lookasid
7230: 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65  e malloc provide
7240: 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20  s a significant 
7250: 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61  performance enha
7260: 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72  ncement.** (appr
7270: 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69 64  ox 10%) by avoid
7280: 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c  ing numerous mal
7290: 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73 74  loc/free request
72a0: 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  s while parsing.
72b0: 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
72c0: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f  s..**.** The Loo
72d0: 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72 65  kaside structure
72e0: 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61   holds configura
72f0: 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tion information
7300: 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f   about the.** lo
7310: 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73  okaside malloc s
7320: 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20  ubsystem.  Each 
7330: 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79  available memory
7340: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a   allocation in.*
7350: 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20  * the lookaside 
7360: 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f  subsystem is sto
7370: 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20  red on a linked 
7380: 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64  list of Lookasid
7390: 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73  eSlot.** objects
73a0: 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ..**.** Lookasid
73b0: 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  e allocations ar
73c0: 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66  e only allowed f
73d0: 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20  or objects that 
73e0: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a  are associated.*
73f0: 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  * with a particu
7400: 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e  lar database con
7410: 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c  nection.  Hence,
7420: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
7430: 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65  ion cannot.** be
7440: 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61   stored in looka
7450: 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e 20  side because in 
7460: 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64  shared cache mod
7470: 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66  e the schema inf
7480: 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73  ormation.** is s
7490: 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c  hared by multipl
74a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
74b0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f  ctions.  Therefo
74c0: 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e  re, while parsin
74d0: 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f  g.** schema info
74e0: 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f  rmation, the Loo
74f0: 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20  kaside.bEnabled 
7500: 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64 20  flag is cleared 
7510: 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61  so that.** looka
7520: 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  side allocations
7530: 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f   are not used to
7540: 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73   construct the s
7550: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a  chema objects..*
7560: 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  /.struct Lookasi
7570: 64 65 20 7b 0a 20 20 75 31 36 20 73 7a 3b 20 20  de {.  u16 sz;  
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7590: 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62  * Size of each b
75a0: 75 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a  uffer in bytes *
75b0: 2f 0a 20 20 75 38 20 62 45 6e 61 62 6c 65 64 3b  /.  u8 bEnabled;
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
75d0: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 20  alse to disable 
75e0: 6e 65 77 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  new lookaside al
75f0: 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  locations */.  u
7600: 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20  8 bMalloced;    
7610: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
7620: 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65  f pStart obtaine
7630: 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d  d from sqlite3_m
7640: 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74  alloc() */.  int
7650: 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20   nOut;          
7660: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
7670: 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e  f buffers curren
7680: 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
7690: 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20  */.  int mxOut; 
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
76b0: 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66  Highwater mark f
76c0: 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74  or nOut */.  int
76d0: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
76e0: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
76f0: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
7700: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
7710: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
7720: 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f  Slot *pFree;   /
7730: 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61  * List of availa
7740: 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  ble buffers */. 
7750: 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20   void *pStart;  
7760: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7770: 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61  t byte of availa
7780: 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65  ble memory space
7790: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64   */.  void *pEnd
77a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
77b0: 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74   First byte past
77c0: 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c   end of availabl
77d0: 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74  e space */.};.st
77e0: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
77f0: 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  ot {.  Lookaside
7800: 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  Slot *pNext;    
7810: 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69  /* Next buffer i
7820: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72  n the list of fr
7830: 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b  ee buffers */.};
7840: 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74  ../*.** A hash t
7850: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
7860: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a  n definitions..*
7870: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
7880: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
7890: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
78a0: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
78b0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
78c0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
78d0: 20 46 75 6e 63 44 65 66 2e 70 48 61 73 68 20 63   FuncDef.pHash c
78e0: 68 61 69 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  hain..*/.struct 
78f0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
7900: 46 75 6e 63 44 65 66 20 2a 61 5b 32 33 5d 3b 20  FuncDef *a[23]; 
7910: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
7920: 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ble for function
7930: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  s */.};../*.** E
7940: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
7950: 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e  nection is an in
7960: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
7970: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
7980: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c  e..*/.struct sql
7990: 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  ite3 {.  sqlite3
79a0: 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20  _vfs *pVfs;     
79b0: 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74         /* OS Int
79c0: 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75  erface */.  stru
79d0: 63 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20  ct Vdbe *pVdbe; 
79e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
79f0: 74 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74  t of active virt
7a00: 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a  ual machines */.
7a10: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74    CollSeq *pDflt
7a20: 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  Coll;           
7a30: 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63  /* The default c
7a40: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
7a50: 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20  e (BINARY) */.  
7a60: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d  sqlite3_mutex *m
7a70: 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a  utex;         /*
7a80: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65   Connection mute
7a90: 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20  x */.  Db *aDb; 
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b       /* All back
7ac0: 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44  ends */.  int nD
7ad0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
7ae0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
7af0: 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75  r of backends cu
7b00: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
7b10: 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20  /.  int flags;  
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f    /* Miscellaneo
7b40: 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65  us flags. See be
7b50: 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  low */.  i64 las
7b60: 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20  tRowid;         
7b70: 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20         /* ROWID 
7b80: 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69  of most recent i
7b90: 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65  nsert (see above
7ba0: 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61  ) */.  i64 szMma
7bb0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
7bc0: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
7bd0: 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e  mmap_size settin
7be0: 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  g */.  unsigned 
7bf0: 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20  int openFlags;  
7c00: 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61       /* Flags pa
7c10: 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f  ssed to sqlite3_
7c20: 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20  vfs.xOpen() */. 
7c30: 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20   int errCode;   
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7c50: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
7c60: 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45  ror code (SQLITE
7c70: 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  _*) */.  int err
7c80: 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Mask;           
7c90: 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75         /* & resu
7ca0: 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68  lt codes with th
7cb0: 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  is before return
7cc0: 69 6e 67 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f  ing */.  u16 dbO
7cd0: 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  ptFlags;        
7ce0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
7cf0: 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c  to enable/disabl
7d00: 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  e optimizations 
7d10: 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d  */.  u8 autoComm
7d20: 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
7d30: 20 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63     /* The auto-c
7d40: 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20  ommit flag. */. 
7d50: 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20   u8 temp_store; 
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d70: 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d  * 1: file 2: mem
7d80: 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a  ory 0: default *
7d90: 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69  /.  u8 mallocFai
7da0: 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  led;            
7db0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20    /* True if we 
7dc0: 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c  have seen a mall
7dd0: 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20  oc failure */.  
7de0: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7e00: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
7e10: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
7e20: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
7e30: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
7e40: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
7e50: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
7e60: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
7e70: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
7e80: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
7e90: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
7ea0: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
7eb0: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
7ec0: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
7ed0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
7ee0: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
7ef0: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
7f00: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
7f10: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
7f20: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
7f30: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
7f40: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
7f50: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 69 6e   is a TS */.  in
7f60: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
7f80: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
7f90: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
7fa0: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7fc0: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
7fd0: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
7fe0: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
7ff0: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
8000: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
8010: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
8020: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
8030: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
8040: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
8050: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
8060: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
8070: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
8080: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
8090: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
80a0: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
80b0: 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74  /.  struct sqlit
80c0: 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20  e3InitInfo {    
80d0: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
80e0: 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69   used during ini
80f0: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20  tialization */. 
8100: 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20     int newTnum; 
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8120: 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61  * Rootpage of ta
8130: 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ble being initia
8140: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
8150: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
8160: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
8170: 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69  h db file is bei
8180: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
8190: 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20  /.    u8 busy;  
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72    /* TRUE if cur
81c0: 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a  rently initializ
81d0: 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72  ing */.    u8 or
81e0: 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20  phanTrigger;    
81f0: 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73         /* Last s
8200: 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68  tatement is orph
8210: 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65  aned TEMP trigge
8220: 72 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20  r */.  } init;. 
8230: 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65   int nVdbeActive
8240: 3b 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 56 44 42 45  * Number of VDBE
8260: 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  s currently runn
8270: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ing */.  int nVd
8280: 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20  beRead;         
8290: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
82a0: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
82b0: 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72   that read or wr
82c0: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
82d0: 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20  beWrite;        
82e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
82f0: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
8300: 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77   that read and w
8310: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
8320: 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20  dbeExec;        
8330: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8340: 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
8350: 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20  s to VdbeExec() 
8360: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
8370: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
8380: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8390: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
83a0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
83b0: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
83c0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
83d0: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
83e0: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 76 6f 69  handles */.  voi
83f0: 64 20 28 2a 78 54 72 61 63 65 29 28 76 6f 69 64  d (*xTrace)(void
8400: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  *,const char*); 
8410: 20 20 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20         /* Trace 
8420: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8430: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8460: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
8470: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
8480: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
8490: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
84a0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
84b0: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
84c0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
84d0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
84f0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
8500: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
8510: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
8520: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
8530: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
8540: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
8550: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 69 6e  ack() */   .  in
8560: 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62  t (*xCommitCallb
8570: 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20  ack)(void*);    
8580: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
8590: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
85a0: 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b   void *pRollback
85b0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
85c0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
85d0: 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62  o xRollbackCallb
85e0: 61 63 6b 28 29 20 2a 2f 20 20 20 0a 20 20 76 6f  ack() */   .  vo
85f0: 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61  id (*xRollbackCa
8600: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20  llback)(void*); 
8610: 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76  /* Invoked at ev
8620: 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20  ery commit. */. 
8630: 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72   void *pUpdateAr
8640: 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64  g;.  void (*xUpd
8650: 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ateCallback)(voi
8660: 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  d*,int, const ch
8670: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
8680: 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23  sqlite_int64);.#
8690: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
86a0: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
86b0: 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55  OK.  void *pPreU
86c0: 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20  pdateArg;       
86d0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
86e0: 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61  ment to xPreUpda
86f0: 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  teCallback */.  
8700: 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74  void (*xPreUpdat
8710: 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a  eCallback)(   /*
8720: 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e   Registered usin
8730: 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64  g sqlite3_preupd
8740: 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20  ate_hook() */.  
8750: 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a    void*,sqlite3*
8760: 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a  ,int,char const*
8770: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c  ,char const*,sql
8780: 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74  ite3_int64,sqlit
8790: 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20  e3_int64.  );.  
87a0: 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55  PreUpdate *pPreU
87b0: 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a  pdate;        /*
87c0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
87d0: 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63  ive pre-update c
87e0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
87f0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
8800: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
8810: 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  K */.#ifndef SQL
8820: 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
8830: 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63  nt (*xWalCallbac
8840: 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74  k)(void *, sqlit
8850: 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
8860: 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64   *, int);.  void
8870: 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69   *pWalArg;.#endi
8880: 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  f.  void(*xCollN
8890: 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c  eeded)(void*,sql
88a0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
88b0: 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  ep,const char*);
88c0: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
88d0: 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71  eded16)(void*,sq
88e0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
88f0: 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29  Rep,const void*)
8900: 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e  ;.  void *pCollN
8910: 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69  eededArg;.  sqli
8920: 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b  te3_value *pErr;
8930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
8940: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d  t recent error m
8950: 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f  essage */.  unio
8960: 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65  n {.    volatile
8970: 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74   int isInterrupt
8980: 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73  ed; /* True if s
8990: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
89a0: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
89b0: 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e   */.    double n
89c0: 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20  otUsed1;        
89d0: 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f      /* Spacer */
89e0: 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61  .  } u1;.  Looka
89f0: 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20  side lookaside; 
8a00: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b           /* Look
8a10: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e  aside malloc con
8a20: 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69  figuration */.#i
8a30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8a40: 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
8a50: 20 20 69 6e 74 20 28 2a 78 41 75 74 68 29 28 76    int (*xAuth)(v
8a60: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
8a70: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
8a80: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
8a90: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20 20  st char*);.     
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63             /* Ac
8ac0: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
8ad0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
8ae0: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8b00: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
8b10: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
8b20: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
8b30: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
8b40: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
8b50: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
8b60: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
8b70: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
8b80: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
8b90: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
8ba0: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
8bb0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
8bc0: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
8bd0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
8be0: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
8bf0: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
8c00: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
8c10: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
8c20: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
8c30: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
8c40: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
8c50: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
8c60: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
8c70: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
8c80: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
8c90: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
8ca0: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
8cb0: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
8cc0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
8cd0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
8ce0: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
8cf0: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
8d00: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
8d10: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
8d20: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
8d30: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8d50: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
8d60: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
8d70: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
8d80: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
8d90: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
8da0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
8db0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
8dc0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 46 75 6e   */.#endif.  Fun
8dd0: 63 44 65 66 48 61 73 68 20 61 46 75 6e 63 3b 20  cDefHash aFunc; 
8de0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
8df0: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
8e00: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
8e10: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
8e20: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
8e30: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
8e40: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
8e50: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
8e60: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
8e70: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
8e80: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
8e90: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
8ea0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
8eb0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
8ec0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
8ed0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
8ee0: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
8ef0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
8f00: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
8f10: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
8f20: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
8f30: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
8f40: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
8f50: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
8f60: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
8f70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
8f80: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
8f90: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
8fa0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
8fb0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
8fc0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8fd0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
8fe0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
8ff0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
9000: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
9010: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
9020: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
9030: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
9040: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
9050: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
9060: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
9070: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
9080: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
9090: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
90b0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
90c0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
90d0: 46 72 65 65 28 29 20 2a 2f 0a 0a 23 69 66 64 65  Free() */..#ifde
90e0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
90f0: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
9100: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
9110: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
9120: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
9130: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
9140: 52 20 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e  R .  ** mutex, n
9150: 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75  ot by sqlite3.mu
9160: 74 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73  tex. They are us
9170: 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f  ed by code in no
9180: 74 69 66 79 2e 63 2e 20 0a 20 20 2a 2a 0a 20 20  tify.c. .  **.  
9190: 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63  ** When X.pUnloc
91a0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  kConnection==Y, 
91b0: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
91c0: 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72  X is waiting for
91d0: 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63   Y to.  ** unloc
91e0: 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  k so that it can
91f0: 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20   proceed..  **. 
9200: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63   ** When X.pBloc
9210: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  kingConnection==
9220: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
9230: 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61  at something tha
9240: 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74  t X tried.  ** t
9250: 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e  ried to do recen
9260: 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68 20  tly failed with 
9270: 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  an SQLITE_LOCKED
9280: 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f   error due to lo
9290: 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79  cks.  ** held by
92a0: 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74   Y..  */.  sqlit
92b0: 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e  e3 *pBlockingCon
92c0: 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e  nection; /* Conn
92d0: 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73  ection that caus
92e0: 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  ed SQLITE_LOCKED
92f0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9300: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
9310: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
9320: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74  onnection to wat
9330: 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f  ch for unlock */
9340: 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b  .  void *pUnlock
9350: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
9360: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
9370: 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e  ment to xUnlockN
9380: 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20  otify */.  void 
9390: 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29  (*xUnlockNotify)
93a0: 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20  (void **, int); 
93b0: 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66   /* Unlock notif
93c0: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
93d0: 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c  sqlite3 *pNextBl
93e0: 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a  ocked;        /*
93f0: 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66   Next in list of
9400: 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e   all blocked con
9410: 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64  nections */.#end
9420: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
9430: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
9440: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
9450: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
9460: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
9470: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
9480: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  chema->enc)../*.
9490: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
94a0: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
94b0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2f 0a 23 64 65  e3.flags..*/.#de
94c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
94d0: 54 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30  Trace      0x000
94e0: 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74  00001  /* True t
94f0: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
9500: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
9510: 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  e SQLITE_InternC
9520: 68 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30  hanges  0x000000
9530: 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74  02  /* Uncommitt
9540: 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68  ed Hash table ch
9550: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9560: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
9570: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
9580: 34 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  4  /* Use full f
9590: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
95a0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
95b0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
95c0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 30 38 20  ync  0x00000008 
95d0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
95e0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
95f0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
9600: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
9610: 20 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f     0x00000010  /
9620: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
9630: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
9640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
9650: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
9660: 30 30 30 32 30 20 20 2f 2a 20 53 68 6f 77 20 66  00020  /* Show f
9670: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
9680: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
9690: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f  efine SQLITE_Sho
96a0: 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30  rtColNames  0x00
96b0: 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20  000040  /* Show 
96c0: 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61  short columns na
96d0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  mes */.#define S
96e0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
96f0: 20 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20       0x00000080 
9700: 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63   /* Count rows c
9710: 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54  hanged by INSERT
9720: 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  , */.           
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9750: 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  *   DELETE, or U
9760: 50 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e  PDATE and return
9770: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
97a0: 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69     the count usi
97b0: 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a  ng a callback. *
97c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
97d0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20  _NullCallback   
97e0: 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49  0x00000100  /* I
97f0: 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61  nvoke the callba
9800: 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a  ck once if the *
9810: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
9840: 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
9850: 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
9860: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
9870: 20 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30        0x00000200
9880: 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74    /* Debug print
9890: 20 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75   SQL as it execu
98a0: 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  tes */.#define S
98b0: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
98c0: 67 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20  g    0x00000400 
98d0: 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e   /* Debug listin
98e0: 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72  gs of VDBE progr
98f0: 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ams */.#define S
9900: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
9910: 61 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20  a    0x00000800 
9920: 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65   /* OK to update
9930: 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a   SQLITE_MASTER *
9940: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9950: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
9960: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54  0x00001000  /* T
9970: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
9980: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
9990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
99a0: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
99b0: 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f  x00002000  /* Do
99c0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
99d0: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
99e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
99f0: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
9a00: 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46   0x0004000  /* F
9a10: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
9a20: 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mode */.#define 
9a30: 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c  SQLITE_LegacyFil
9a40: 65 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30  eFmt  0x00008000
9a50: 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20    /* Create new 
9a60: 64 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72  databases in for
9a70: 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65  mat 1 */.#define
9a80: 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79   SQLITE_Recovery
9a90: 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30  Mode   0x0001000
9aa0: 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68  0  /* Ignore sch
9ab0: 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ema errors */.#d
9ac0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
9ad0: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
9ae0: 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72  020000  /* Rever
9af0: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
9b00: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
9b10: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
9b20: 72 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30  rs    0x00040000
9b30: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
9b40: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
9b50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9b60: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
9b70: 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45  0x00080000  /* E
9b80: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
9b90: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
9ba0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9bb0: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
9bc0: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
9bd0: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
9be0: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
9bf0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65  ine SQLITE_Prefe
9c00: 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30  rBuiltin  0x0020
9c10: 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65  0000  /* Prefere
9c20: 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20  nce to built-in 
9c30: 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65  funcs */.#define
9c40: 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65   SQLITE_LoadExte
9c50: 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30  nsion  0x0040000
9c60: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61  0  /* Enable loa
9c70: 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23  d_extension */.#
9c80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
9c90: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
9ca0: 30 38 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0800000  /* True
9cb0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
9cc0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
9cd0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
9ce0: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
9cf0: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
9d00: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
9d10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
9d20: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
9d30: 30 32 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  02000000  /* Dis
9d40: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
9d50: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
9d60: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
9d70: 20 20 20 20 20 20 20 30 78 30 34 30 30 30 30 30         0x0400000
9d80: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
9d90: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
9da0: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f  /.../*.** Bits o
9db0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62  f the sqlite3.db
9dc0: 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74  OptFlags field t
9dd0: 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79 20  hat are used by 
9de0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74  the.** sqlite3_t
9df0: 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49  est_control(SQLI
9e00: 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49  TE_TESTCTRL_OPTI
9e10: 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69  MIZATIONS,...) i
9e20: 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73  nterface to.** s
9e30: 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61 62  electively disab
9e40: 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d  le various optim
9e50: 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65  izations..*/.#de
9e60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72  fine SQLITE_Quer
9e70: 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30  yFlattener 0x000
9e80: 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61  1   /* Query fla
9e90: 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ttening */.#defi
9ea0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e  ne SQLITE_Column
9eb0: 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32 20  Cache    0x0002 
9ec0: 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68    /* Column cach
9ed0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9ee0: 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72  ITE_GroupByOrder
9ef0: 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47     0x0004   /* G
9f00: 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20  ROUPBY cover of 
9f10: 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69  ORDERBY */.#defi
9f20: 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72  ne SQLITE_Factor
9f30: 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20  OutConst 0x0008 
9f40: 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61    /* Constant fa
9f50: 63 74 6f 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69  ctoring */.#defi
9f60: 6e 65 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  ne SQLITE_IdxRea
9f70: 6c 41 73 49 6e 74 20 20 20 30 78 30 30 31 30 20  lAsInt   0x0010 
9f80: 20 20 2f 2a 20 53 74 6f 72 65 20 52 45 41 4c 20    /* Store REAL 
9f90: 61 73 20 49 4e 54 20 69 6e 20 69 6e 64 69 63 65  as INT in indice
9fa0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
9fb0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
9fc0: 20 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44     0x0020   /* D
9fd0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
9fe0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
9ff0: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
a000: 53 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20  Scan   0x0040   
a010: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
a020: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
a030: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
a040: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20  yIdxJoin 0x0080 
a050: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
a060: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
a070: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a080: 54 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65  TE_SubqCoroutine
a090: 20 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76    0x0100   /* Ev
a0a0: 61 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65  aluate subquerie
a0b0: 73 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20  s as coroutines 
a0c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a0d0: 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20  E_Transitive    
a0e0: 20 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61   0x0200   /* Tra
a0f0: 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69  nsitive constrai
a100: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
a110: 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f  QLITE_OmitNoopJo
a120: 69 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a  in   0x0400   /*
a130: 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62   Omit unused tab
a140: 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a  les in joins */.
a150: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
a160: 74 61 74 33 20 20 20 20 20 20 20 20 20 20 30 78  tat3          0x
a170: 30 38 30 30 20 20 20 2f 2a 20 55 73 65 20 74 68  0800   /* Use th
a180: 65 20 53 51 4c 49 54 45 5f 53 54 41 54 33 20 74  e SQLITE_STAT3 t
a190: 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
a1a0: 53 51 4c 49 54 45 5f 41 64 6a 75 73 74 4f 75 74  SQLITE_AdjustOut
a1b0: 45 73 74 20 20 20 30 78 31 30 30 30 20 20 20 2f  Est   0x1000   /
a1c0: 2a 20 41 64 6a 75 73 74 20 6f 75 74 70 75 74 20  * Adjust output 
a1d0: 65 73 74 69 6d 61 74 65 73 20 75 73 69 6e 67 20  estimates using 
a1e0: 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
a1f0: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
a200: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
a210: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
a220: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
a230: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
a240: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
a250: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
a260: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
a270: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64  sabled..*/.#ifnd
a280: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
a290: 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 64 65 66  UILTIN_TEST.#def
a2a0: 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e  ine Optimization
a2b0: 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  Disabled(db, mas
a2c0: 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70  k)  (((db)->dbOp
a2d0: 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d  tFlags&(mask))!=
a2e0: 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d  0).#define Optim
a2f0: 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64  izationEnabled(d
a300: 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62  b, mask)   (((db
a310: 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d  )->dbOptFlags&(m
a320: 61 73 6b 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ask))==0).#else.
a330: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
a340: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
a350: 20 6d 61 73 6b 29 20 20 30 0a 23 64 65 66 69 6e   mask)  0.#defin
a360: 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e  e OptimizationEn
a370: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
a380: 20 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    1.#endif../*.*
a390: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
a3a0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
a3b0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
a3c0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
a3d0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
a3e0: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
a3f0: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
a400: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
a410: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
a420: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
a430: 63 74 6f 72 4f 6b 28 50 29 20 5c 0a 20 20 28 28  ctorOk(P) \.  ((
a440: 50 29 2d 3e 63 6f 6f 6b 69 65 47 6f 74 6f 3e 30  P)->cookieGoto>0
a450: 20 26 26 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e   && Optimization
a460: 45 6e 61 62 6c 65 64 28 28 50 29 2d 3e 64 62 2c  Enabled((P)->db,
a470: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
a480: 43 6f 6e 73 74 29 29 0a 0a 2f 2a 0a 2a 2a 20 50  Const))../*.** P
a490: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
a4a0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
a4b0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
a4c0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
a4d0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
a4e0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
a4f0: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
a500: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
a510: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
a520: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
a530: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a540: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
a550: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
a560: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
a570: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a580: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
a590: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
a5a0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
a5b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a5c0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
a5d0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
a5e0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
a5f0: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
a600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a610: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
a620: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
a630: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
a640: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
a650: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
a660: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
a670: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
a680: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
a690: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
a6a0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
a6b0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
a6c0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
a6d0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
a6e0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
a6f0: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
a700: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
a710: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
a720: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
a730: 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e  ructure.  A poin
a740: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
a750: 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64 20  cture is stored 
a760: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46  in the sqlite.aF
a770: 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  unc.** hash tabl
a780: 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c  e.  When multipl
a790: 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  e functions have
a7a0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
a7b0: 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a  the hash table.*
a7c0: 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69  * points to a li
a7d0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65  nked list of the
a7e0: 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  se structures..*
a7f0: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
a800: 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20   {.  i16 nArg;  
a810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a820: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
a830: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
a840: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66  mited */.  u16 f
a850: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
a860: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
a870: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
a880: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
a890: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
a8a0: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
a8b0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
a8c0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
a8d0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
a8e0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
a8f0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
a900: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
a910: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
a920: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
a930: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
a940: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
a950: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a960: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a970: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a980: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a990: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a9a0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a9b0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a9c0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a9d0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a9e0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a9f0: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
aa00: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
aa10: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
aa20: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
aa30: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
aa40: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
aa50: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
aa60: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
aa70: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
aa80: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
aa90: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
aaa0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
aab0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
aac0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
aad0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
aae0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
aaf0: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
ab00: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
ab10: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
ab20: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
ab30: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
ab40: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
ab50: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
ab60: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
ab70: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
ab80: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
ab90: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
aba0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
abb0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
abc0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
abd0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
abe0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
abf0: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
ac00: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
ac10: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
ac20: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
ac30: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
ac40: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
ac50: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
ac60: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
ac70: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
ac80: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
ac90: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
aca0: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
acb0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
acc0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
acd0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
ace0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
acf0: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
ad00: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
ad10: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
ad20: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
ad30: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
ad40: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
ad50: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
ad60: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
ad70: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
ad80: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
ad90: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
ada0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
adb0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
adc0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
add0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
ade0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
adf0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
ae00: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
ae10: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
ae20: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
ae30: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
ae40: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
ae50: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
ae60: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
ae70: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
ae80: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
ae90: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
aea0: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
aeb0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
aec0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
aed0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
aee0: 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c  SK  0x003 /* SQL
aef0: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
af00: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
af10: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
af20: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
af30: 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e      0x004 /* Can
af40: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
af50: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
af60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
af70: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
af80: 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73   0x008 /* Case-s
af90: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
afa0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
afb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
afc0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31  NC_EPHEM    0x01
afd0: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
afe0: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
aff0: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
b000: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b010: 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74  L 0x020 /* sqlit
b020: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
b030: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
b040: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
b050: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
b060: 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c     0x040 /* Buil
b070: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
b080: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
b090: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
b0a0: 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20  PEOF   0x080 /* 
b0b0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
b0c0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
b0d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
b0e0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30  C_COUNT    0x100
b0f0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
b100: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
b110: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
b120: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
b130: 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x200 /* Built-i
b140: 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20  n coalesce() or 
b150: 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66  ifnull() */.#def
b160: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b170: 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f  UNLIKELY 0x400 /
b180: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
b190: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
b1a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1b0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
b1c0: 78 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  x800 /* Constant
b1d0: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
b1e0: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
b1f0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
b200: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
b210: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
b220: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
b230: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
b240: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
b250: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
b260: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
b270: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
b280: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
b290: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
b2a0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
b2b0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
b2c0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
b2d0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
b2e0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
b2f0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
b300: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
b310: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
b320: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
b330: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
b340: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
b350: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
b360: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
b370: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
b380: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
b390: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
b3a0: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
b3b0: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
b3c0: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
b3d0: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
b3e0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
b3f0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b400: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
b410: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
b420: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
b430: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
b440: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
b450: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
b460: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
b470: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
b480: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52  ag..**.**   AGGR
b490: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
b4a0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53  g, iArg, bNC, xS
b4b0: 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20  tep, xFinal).** 
b4c0: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
b4d0: 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
b4e0: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
b4f0: 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
b500: 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
b510: 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
b520: 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
b530: 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
b540: 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
b550: 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
b560: 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
b570: 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
b580: 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
b590: 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
b5a0: 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
b5b0: 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
b5c0: 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
b5d0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
b5e0: 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
b5f0: 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
b600: 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a  function zName .
b610: 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65  **     that acce
b620: 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e  pts nArg argumen
b630: 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d  ts and is implem
b640: 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20  ented by a call 
b650: 74 6f 20 43 20 0a 2a 2a 20 20 20 20 20 66 75 6e  to C .**     fun
b660: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
b670: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
b680: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
b690: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
b6a0: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
b6b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
b6c0: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
b6d0: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
b6e0: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
b6f0: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
b700: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
b710: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
b720: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
b730: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
b740: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
b750: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
b760: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
b770: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
b780: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
b790: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
b7a0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b7b0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
b7c0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
b7d0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
b7e0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
b7f0: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
b800: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
b810: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
b820: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
b830: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
b840: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b850: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
b860: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
b870: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
b880: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
b890: 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  }.#define FUNCTI
b8a0: 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ON2(zName, nArg,
b8b0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
b8c0: 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  c, extraFlags) \
b8d0: 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f  .  {nArg,SQLITE_
b8e0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
b8f0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
b900: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b910: 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
b920: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
b930: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
b940: 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 23 7a   xFunc, 0, 0, #z
b950: 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23 64 65 66  Name, 0, 0}.#def
b960: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
b970: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
b980: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
b990: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
b9a0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
b9b0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
b9c0: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
b9d0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72  DCOLL), \.   pAr
b9e0: 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  g, 0, xFunc, 0, 
b9f0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
ba00: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
ba10: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
ba20: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
ba30: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
ba40: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
ba50: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
ba60: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
ba70: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
ba80: 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d  0, #zName, 0, 0}
ba90: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
baa0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
bab0: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
bac0: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
bad0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
bae0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
baf0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
bb00: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
bb10: 28 61 72 67 29 2c 20 30 2c 20 30 2c 20 78 53 74  (arg), 0, 0, xSt
bb20: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
bb30: 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ,0,0}../*.** All
bb40: 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
bb50: 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
bb60: 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
bb70: 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
bb80: 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
bb90: 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
bba0: 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
bbb0: 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
bbc0: 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
bbd0: 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
bbe0: 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
bbf0: 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
bc00: 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
bc10: 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
bc20: 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
bc30: 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
bc40: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
bc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc60: 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
bc70: 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
bc80: 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
bc90: 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bcb0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
bcc0: 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
bcd0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
bce0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
bcf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bd00: 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
bd10: 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
bd20: 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd40: 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
bd50: 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
bd60: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
bd70: 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
bd80: 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
bd90: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
bda0: 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
bdb0: 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
bdc0: 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
bdd0: 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
bde0: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
bdf0: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
be00: 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
be10: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
be20: 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
be30: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
be40: 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
be50: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
be60: 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
be70: 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
be80: 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
be90: 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
bea0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
beb0: 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
bec0: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
bed0: 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
bee0: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
bef0: 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
bf00: 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
bf10: 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
bf20: 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
bf30: 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
bf40: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf60: 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
bf70: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
bf80: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
bf90: 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bfb0: 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
bfc0: 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
bfd0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
bfe0: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
bff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
c000: 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
c010: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  nction */.};../*
c020: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
c030: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
c040: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
c050: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
c060: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
c070: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
c080: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
c090: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
c0a0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
c0b0: 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
c0c0: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
c0d0: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
c0e0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
c0f0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 44 66  n */.  char *zDf
c100: 6c 74 3b 20 20 20 20 20 2f 2a 20 4f 72 69 67 69  lt;     /* Origi
c110: 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
c120: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
c130: 0a 20 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  .  char *zType; 
c140: 20 20 20 20 2f 2a 20 44 61 74 61 20 74 79 70 65      /* Data type
c150: 20 66 6f 72 20 74 68 69 73 20 63 6f 6c 75 6d 6e   for this column
c160: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
c170: 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
c180: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
c190: 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
c1a0: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
c1b0: 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
c1c0: 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
c1d0: 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
c1e0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
c1f0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
c200: 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
c210: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
c220: 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
c230: 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
c240: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
c250: 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
c260: 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f 0a 20 20 75  .  INT==1 */.  u
c270: 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
c280: 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
c290: 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
c2a0: 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
c2b0: 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
c2c0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
c2d0: 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
c2e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
c2f0: 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
c300: 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
c310: 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
c320: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
c330: 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
c340: 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
c350: 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
c360: 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
c370: 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 0a 2a  l table */../*.*
c380: 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
c390: 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
c3a0: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
c3b0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
c3c0: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
c3d0: 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
c3e0: 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
c3f0: 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
c400: 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
c410: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
c420: 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
c430: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
c440: 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
c450: 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
c460: 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
c470: 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
c480: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
c490: 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
c4a0: 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
c4b0: 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
c4c0: 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
c4d0: 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
c4e0: 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
c4f0: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
c500: 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
c510: 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
c520: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
c530: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
c540: 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
c550: 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
c560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
c570: 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
c580: 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
c590: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
c5a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
c5b0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
c5c0: 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
c5d0: 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
c5e0: 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
c5f0: 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
c600: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
c610: 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
c620: 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
c630: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
c640: 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
c650: 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
c660: 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
c670: 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
c680: 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
c690: 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
c6a0: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
c6b0: 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
c6c0: 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
c6d0: 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
c6e0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
c6f0: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
c700: 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
c710: 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
c720: 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
c730: 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
c740: 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
c750: 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
c760: 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
c770: 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
c780: 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
c790: 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
c7a0: 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
c7b0: 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
c7c0: 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
c7d0: 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74    .**.** But rat
c7e0: 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77  her than start w
c7f0: 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62  ith 0 or 1, we b
c800: 65 67 69 6e 20 77 69 74 68 20 27 61 27 2e 20 20  egin with 'a'.  
c810: 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65  That way,.** whe
c820: 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e  n multiple affin
c830: 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f  ity types are co
c840: 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20  ncatenated into 
c850: 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20  a string and.** 
c860: 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f  used as the P4 o
c870: 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c  perand, they wil
c880: 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62  l be more readab
c890: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61  le..**.** Note a
c8a0: 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d  lso that the num
c8b0: 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67  eric types are g
c8c0: 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20  rouped together 
c8d0: 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a  so that testing.
c8e0: 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63  ** for a numeric
c8f0: 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c   type is a singl
c900: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2f  e comparison..*/
c910: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c920: 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 61 27  AFF_TEXT     'a'
c930: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c940: 41 46 46 5f 4e 4f 4e 45 20 20 20 20 20 27 62 27  AFF_NONE     'b'
c950: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c960: 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 63 27  AFF_NUMERIC  'c'
c970: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c980: 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 64 27  AFF_INTEGER  'd'
c990: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c9a0: 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 65 27  AFF_REAL     'e'
c9b0: 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
c9c0: 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
c9d0: 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
c9e0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
c9f0: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
ca00: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
ca10: 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
ca20: 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
ca30: 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
ca40: 69 74 79 20 76 61 6c 75 65 2e 20 0a 2a 2f 0a 23  ity value. .*/.#
ca50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
ca60: 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 36 37 0a  F_MASK     0x67.
ca70: 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61  ./*.** Additiona
ca80: 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61  l bit values tha
ca90: 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69  t can be ORed wi
caa0: 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77  th an affinity w
cab0: 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69  ithout.** changi
cac0: 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e  ng the affinity.
cad0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
cae0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
caf0: 30 78 30 38 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x08  /* jumps i
cb00: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
cb10: 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
cb20: 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
cb30: 50 32 20 20 20 20 20 20 30 78 31 30 20 20 2f 2a  P2      0x10  /*
cb40: 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
cb50: 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
cb60: 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
cb70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
cb80: 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
cb90: 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 0a  * NULL=NULL */..
cba0: 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
cbb0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
cbc0: 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
cbd0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
cbe0: 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
cbf0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
cc00: 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  . .**.** If the 
cc10: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
cc20: 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
cc30: 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
cc40: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
cc50: 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
cc60: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
cc70: 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
cc80: 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
cc90: 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
cca0: 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
ccb0: 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
ccc0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
ccd0: 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
cce0: 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
ccf0: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
cd00: 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
cd10: 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
cd20: 69 72 74 75 61 6c 20 74 61 62 6c 65 20 0a 2a 2a  irtual table .**
cd30: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
cd40: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
cd50: 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
cd60: 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
cd70: 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f   .** database co
cd80: 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
cd90: 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
cda0: 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
cdb0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 73 63 68 65  atabase .** sche
cdc0: 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
cdd0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
cde0: 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
cdf0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
ce00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
ce10: 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
ce20: 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
ce30: 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
ce40: 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
ce50: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
ce60: 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
ce70: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
ce80: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
ce90: 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
cea0: 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
ceb0: 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
cec0: 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
ced0: 61 6c 20 74 61 62 6c 65 73 20 0a 2a 2a 20 77 69  al tables .** wi
cee0: 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  thin the databas
cef0: 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20  e. So that they 
cf00: 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f  appear as part o
cf10: 66 20 74 68 65 20 63 61 6c 6c 65 72 73 20 0a 2a  f the callers .*
cf20: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
cf30: 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
cf40: 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
cf50: 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
cf60: 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  ase .** connecti
cf70: 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
cf80: 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
cf90: 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
cfa0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
cfb0: 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
cfc0: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
cfd0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
cfe0: 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
cff0: 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
d000: 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
d010: 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
d020: 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
d030: 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
d040: 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
d050: 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
d060: 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
d070: 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
d080: 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
d090: 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
d0a0: 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
d0b0: 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
d0c0: 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
d0d0: 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
d0e0: 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
d0f0: 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
d100: 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
d110: 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
d120: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
d130: 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
d140: 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
d150: 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
d160: 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
d170: 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
d180: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
d190: 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
d1a0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
d1b0: 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
d1c0: 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
d1d0: 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
d1e0: 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
d1f0: 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
d200: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
d210: 72 65 20 6e 6f 74 20 0a 2a 2a 20 64 65 6c 65 74  re not .** delet
d220: 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
d230: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
d240: 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
d250: 6e 65 63 74 28 29 65 64 20 0a 2a 2a 20 69 6d 6d  nect()ed .** imm
d260: 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61  ediately. Instea
d270: 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65  d, they are move
d280: 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65  d from the Table
d290: 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f  .pVTable list to
d2a0: 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b  .** another link
d2b0: 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62  ed list headed b
d2c0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44  y the sqlite3.pD
d2d0: 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72  isconnect member
d2e0: 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65   of the.** corre
d2f0: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
d300: 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79   structure. They
d310: 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65   are then delete
d320: 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 20  d/xDisconnected 
d330: 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
d340: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
d350: 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
d360: 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
d370: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
d380: 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
d390: 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
d3a0: 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
d3b0: 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
d3c0: 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
d3d0: 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
d3e0: 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
d3f0: 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
d400: 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
d410: 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
d420: 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
d430: 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
d440: 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
d450: 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
d460: 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
d470: 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
d480: 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
d490: 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
d4a0: 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
d4b0: 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
d4c0: 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 0a  s allocated by .
d4d0: 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
d4e0: 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
d4f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
d500: 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
d510: 6c 65 2e 64 62 20 61 73 20 0a 2a 2a 20 74 68 65  le.db as .** the
d520: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
d530: 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
d540: 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
d550: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
d560: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
d570: 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
d580: 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
d590: 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
d5a0: 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
d5b0: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
d5c0: 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
d5d0: 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
d5e0: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
d5f0: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
d600: 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
d610: 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d630: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
d640: 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
d650: 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
d660: 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
d670: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
d680: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
d690: 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
d6a0: 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
d6b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
d6c0: 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
d6d0: 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
d6e0: 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
d6f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
d700: 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
d710: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
d720: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  ;../*.** Each SQ
d730: 4c 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65  L table is repre
d740: 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
d750: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
d760: 6f 66 20 74 68 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  of the.** follow
d770: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
d780: 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a 4e 61 6d 65  *.** Table.zName
d790: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
d7a0: 74 68 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  the table.  The 
d7b0: 63 61 73 65 20 6f 66 20 74 68 65 20 6f 72 69 67  case of the orig
d7c0: 69 6e 61 6c 0a 2a 2a 20 43 52 45 41 54 45 20 54  inal.** CREATE T
d7d0: 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 20 69  ABLE statement i
d7e0: 73 20 73 74 6f 72 65 64 2c 20 62 75 74 20 63 61  s stored, but ca
d7f0: 73 65 20 69 73 20 6e 6f 74 20 73 69 67 6e 69 66  se is not signif
d800: 69 63 61 6e 74 20 66 6f 72 0a 2a 2a 20 63 6f 6d  icant for.** com
d810: 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  parisons..**.** 
d820: 54 61 62 6c 65 2e 6e 43 6f 6c 20 69 73 20 74 68  Table.nCol is th
d830: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
d840: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
d850: 65 2e 20 20 54 61 62 6c 65 2e 61 43 6f 6c 20 69  e.  Table.aCol i
d860: 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
d870: 6f 20 61 6e 20 61 72 72 61 79 20 6f 66 20 43 6f  o an array of Co
d880: 6c 75 6d 6e 20 73 74 72 75 63 74 75 72 65 73 2c  lumn structures,
d890: 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f   one for each co
d8a0: 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  lumn..**.** If t
d8b0: 68 65 20 74 61 62 6c 65 20 68 61 73 20 61 6e 20  he table has an 
d8c0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d8d0: 4b 45 59 2c 20 74 68 65 6e 20 54 61 62 6c 65 2e  KEY, then Table.
d8e0: 69 50 4b 65 79 20 69 73 20 74 68 65 20 69 6e 64  iPKey is the ind
d8f0: 65 78 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6c  ex of.** the col
d900: 75 6d 6e 20 74 68 61 74 20 69 73 20 74 68 61 74  umn that is that
d910: 20 6b 65 79 2e 20 20 20 4f 74 68 65 72 77 69 73   key.   Otherwis
d920: 65 20 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73  e Table.iPKey is
d930: 20 6e 65 67 61 74 69 76 65 2e 20 20 4e 6f 74 65   negative.  Note
d940: 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
d950: 61 74 79 70 65 20 6f 66 20 74 68 65 20 50 52 49  atype of the PRI
d960: 4d 41 52 59 20 4b 45 59 20 6d 75 73 74 20 62 65  MARY KEY must be
d970: 20 49 4e 54 45 47 45 52 20 66 6f 72 20 74 68 69   INTEGER for thi
d980: 73 20 66 69 65 6c 64 20 74 6f 0a 2a 2a 20 62 65  s field to.** be
d990: 20 73 65 74 2e 20 20 41 6e 20 49 4e 54 45 47 45   set.  An INTEGE
d9a0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73  R PRIMARY KEY is
d9b0: 20 75 73 65 64 20 61 73 20 74 68 65 20 72 6f 77   used as the row
d9c0: 69 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  id for each row 
d9d0: 6f 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 2e  of.** the table.
d9e0: 20 20 49 66 20 61 20 74 61 62 6c 65 20 68 61 73    If a table has
d9f0: 20 6e 6f 20 49 4e 54 45 47 45 52 20 50 52 49 4d   no INTEGER PRIM
da00: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 61 20  ARY KEY, then a 
da10: 72 61 6e 64 6f 6d 20 72 6f 77 69 64 0a 2a 2a 20  random rowid.** 
da20: 69 73 20 67 65 6e 65 72 61 74 65 64 20 66 6f 72  is generated for
da30: 20 65 61 63 68 20 72 6f 77 20 6f 66 20 74 68 65   each row of the
da40: 20 74 61 62 6c 65 2e 20 20 54 46 5f 48 61 73 50   table.  TF_HasP
da50: 72 69 6d 61 72 79 4b 65 79 20 69 73 20 73 65 74  rimaryKey is set
da60: 20 69 66 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65   if.** the table
da70: 20 68 61 73 20 61 6e 79 20 50 52 49 4d 41 52 59   has any PRIMARY
da80: 20 4b 45 59 2c 20 49 4e 54 45 47 45 52 20 6f 72   KEY, INTEGER or
da90: 20 6f 74 68 65 72 77 69 73 65 2e 0a 2a 2a 0a 2a   otherwise..**.*
daa0: 2a 20 54 61 62 6c 65 2e 74 6e 75 6d 20 69 73 20  * Table.tnum is 
dab0: 74 68 65 20 70 61 67 65 20 6e 75 6d 62 65 72 20  the page number 
dac0: 66 6f 72 20 74 68 65 20 72 6f 6f 74 20 42 54 72  for the root BTr
dad0: 65 65 20 70 61 67 65 20 6f 66 20 74 68 65 20 74  ee page of the t
dae0: 61 62 6c 65 20 69 6e 20 74 68 65 0a 2a 2a 20 64  able in the.** d
daf0: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 49  atabase file.  I
db00: 66 20 54 61 62 6c 65 2e 69 44 62 20 69 73 20 74  f Table.iDb is t
db10: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
db20: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62  database table b
db30: 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e 20 73 71 6c  ackend.** in sql
db40: 69 74 65 2e 61 44 62 5b 5d 2e 20 20 30 20 69 73  ite.aDb[].  0 is
db50: 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
db60: 74 61 62 61 73 65 20 61 6e 64 20 31 20 69 73 20  tabase and 1 is 
db70: 66 6f 72 20 74 68 65 20 66 69 6c 65 20 74 68 61  for the file tha
db80: 74 0a 2a 2a 20 68 6f 6c 64 73 20 74 65 6d 70 6f  t.** holds tempo
db90: 72 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  rary tables and 
dba0: 69 6e 64 69 63 65 73 2e 20 20 49 66 20 54 46 5f  indices.  If TF_
dbb0: 45 70 68 65 6d 65 72 61 6c 20 69 73 20 73 65 74  Ephemeral is set
dbc0: 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 74 61 62  .** then the tab
dbd0: 6c 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  le is stored in 
dbe0: 61 20 66 69 6c 65 20 74 68 61 74 20 69 73 20 61  a file that is a
dbf0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 6c  utomatically del
dc00: 65 74 65 64 0a 2a 2a 20 77 68 65 6e 20 74 68 65  eted.** when the
dc10: 20 56 44 42 45 20 63 75 72 73 6f 72 20 74 6f 20   VDBE cursor to 
dc20: 74 68 65 20 74 61 62 6c 65 20 69 73 20 63 6c 6f  the table is clo
dc30: 73 65 64 2e 20 20 49 6e 20 74 68 69 73 20 63 61  sed.  In this ca
dc40: 73 65 20 54 61 62 6c 65 2e 74 6e 75 6d 20 0a 2a  se Table.tnum .*
dc50: 2a 20 72 65 66 65 72 73 20 56 44 42 45 20 63 75  * refers VDBE cu
dc60: 72 73 6f 72 20 6e 75 6d 62 65 72 20 74 68 61 74  rsor number that
dc70: 20 68 6f 6c 64 73 20 74 68 65 20 74 61 62 6c 65   holds the table
dc80: 20 6f 70 65 6e 2c 20 6e 6f 74 20 74 6f 20 74 68   open, not to th
dc90: 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 6e  e root.** page n
dca0: 75 6d 62 65 72 2e 20 20 54 72 61 6e 73 69 65 6e  umber.  Transien
dcb0: 74 20 74 61 62 6c 65 73 20 61 72 65 20 75 73 65  t tables are use
dcc0: 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  d to hold the re
dcd0: 73 75 6c 74 73 20 6f 66 20 61 0a 2a 2a 20 73 75  sults of a.** su
dce0: 62 2d 71 75 65 72 79 20 74 68 61 74 20 61 70 70  b-query that app
dcf0: 65 61 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20  ears instead of 
dd00: 61 20 72 65 61 6c 20 74 61 62 6c 65 20 6e 61 6d  a real table nam
dd10: 65 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  e in the FROM cl
dd20: 61 75 73 65 20 0a 2a 2a 20 6f 66 20 61 20 53 45  ause .** of a SE
dd30: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
dd40: 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20  */.struct Table 
dd50: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
dd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
dd70: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   of the table or
dd80: 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d   view */.  Colum
dd90: 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20  n *aCol;        
dda0: 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
ddb0: 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
ddc0: 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e   */.  Index *pIn
ddd0: 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69  dex;       /* Li
dde0: 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65  st of SQL indexe
ddf0: 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e  s on this table.
de00: 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
de10: 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55  elect;     /* NU
de20: 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20  LL for tables.  
de30: 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69  Points to defini
de40: 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20  tion if a view. 
de50: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79  */.  FKey *pFKey
de60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ;         /* Lin
de70: 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  ked list of all 
de80: 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20  foreign keys in 
de90: 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
dea0: 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
deb0: 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64       /* String d
dec0: 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69  efining the affi
ded0: 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c  nity of each col
dee0: 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  umn */.#ifndef S
def0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b  QLITE_OMIT_CHECK
df00: 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
df10: 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
df20: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
df30: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 74 52 6f   */.#endif.  tRo
df40: 77 63 6e 74 20 6e 52 6f 77 45 73 74 3b 20 20 20  wcnt nRowEst;   
df50: 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
df60: 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
df70: 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
df80: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
df90: 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
dfa0: 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 6e   /* Root BTree n
dfb0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  ode for this tab
dfc0: 6c 65 20 28 73 65 65 20 6e 6f 74 65 20 61 62 6f  le (see note abo
dfd0: 76 65 29 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b  ve) */.  i16 iPK
dfe0: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ey;           /*
dff0: 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65   If not negative
e000: 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79  , use aCol[iPKey
e010: 5d 20 61 73 20 74 68 65 20 70 72 69 6d 61 72 79  ] as the primary
e020: 20 6b 65 79 20 2a 2f 0a 20 20 69 31 36 20 6e 43   key */.  i16 nC
e030: 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
e040: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
e050: 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
e060: 65 20 2a 2f 0a 20 20 75 31 36 20 6e 52 65 66 3b  e */.  u16 nRef;
e070: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e080: 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72  umber of pointer
e090: 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20  s to this Table 
e0a0: 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61  */.  LogEst szTa
e0b0: 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  bRow;     /* Est
e0c0: 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65  imated size of e
e0d0: 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e  ach table row in
e0e0: 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 74   bytes */.  u8 t
e0f0: 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  abFlags;        
e100: 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
e110: 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20   values */.  u8 
e120: 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
e130: 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
e140: 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
e150: 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
e160: 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
e170: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
e180: 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
e190: 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
e1a0: 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
e1b0: 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
e1c0: 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
e1d0: 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
e1e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e1f0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
e200: 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
e210: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e220: 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
e230: 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
e240: 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
e250: 72 67 3b 20 20 2f 2a 20 54 65 78 74 20 6f 66 20  rg;  /* Text of 
e260: 61 6c 6c 20 6d 6f 64 75 6c 65 20 61 72 67 73 2e  all module args.
e270: 20 5b 30 5d 20 69 73 20 6d 6f 64 75 6c 65 20 6e   [0] is module n
e280: 61 6d 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ame */.  VTable 
e290: 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
e2a0: 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
e2b0: 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
e2c0: 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
e2d0: 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
e2e0: 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
e2f0: 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
e300: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
e310: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
e320: 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
e330: 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
e340: 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
e350: 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
e360: 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
e370: 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
e380: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
e390: 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 65   values for Tabe
e3a0: 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2f 0a 23 64  .tabFlags..*/.#d
e3b0: 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
e3c0: 79 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20  y        0x01   
e3d0: 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
e3e0: 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
e3f0: 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
e400: 61 6c 20 20 20 20 20 20 20 30 78 30 32 20 20 20  al       0x02   
e410: 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
e420: 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
e430: 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
e440: 65 79 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20  ey   0x04    /* 
e450: 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
e460: 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
e470: 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
e480: 65 6e 74 20 20 20 30 78 30 38 20 20 20 20 2f 2a  ent   0x08    /*
e490: 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
e4a0: 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
e4b0: 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
e4c0: 20 54 46 5f 56 69 72 74 75 61 6c 20 20 20 20 20   TF_Virtual     
e4d0: 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 49      0x10    /* I
e4e0: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
e4f0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
e500: 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
e510: 30 78 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f  0x20    /* No ro
e520: 77 69 64 20 75 73 65 64 2e 20 50 52 49 4d 41 52  wid used. PRIMAR
e530: 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79  Y KEY is the key
e540: 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74   */.../*.** Test
e550: 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20   to see whether 
e560: 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69  or not a table i
e570: 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  s a virtual tabl
e580: 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64  e.  This is.** d
e590: 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73  one as a macro s
e5a0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62  o that it will b
e5b0: 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20  e optimized out 
e5c0: 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20  when virtual.** 
e5d0: 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73  table support is
e5e0: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
e5f0: 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e  e build..*/.#ifn
e600: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e610: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
e620: 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c  define IsVirtual
e630: 28 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e  (X)      (((X)->
e640: 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69  tabFlags & TF_Vi
e650: 72 74 75 61 6c 29 21 3d 30 29 0a 23 20 20 64 65  rtual)!=0).#  de
e660: 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
e670: 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
e680: 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
e690: 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
e6a0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
e6b0: 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
e6c0: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
e6d0: 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
e6e0: 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 65 73 20 74  endif../* Does t
e6f0: 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
e700: 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
e710: 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
e720: 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
e730: 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
e740: 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
e750: 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
e760: 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
e770: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e780: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
e790: 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
e7a0: 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
e7b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
e7c0: 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
e7d0: 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
e7e0: 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
e7f0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
e800: 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
e810: 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
e820: 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
e830: 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
e840: 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
e850: 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
e860: 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
e870: 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
e880: 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
e890: 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
e8a0: 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
e8b0: 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
e8c0: 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
e8d0: 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
e8e0: 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
e8f0: 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
e900: 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
e910: 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
e920: 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
e930: 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
e940: 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
e950: 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
e960: 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
e970: 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
e980: 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
e990: 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
e9a0: 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
e9b0: 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
e9c0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
e9d0: 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
e9e0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
e9f0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
ea00: 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
ea10: 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
ea20: 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
ea30: 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
ea40: 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
ea50: 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
ea60: 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
ea70: 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
ea80: 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
ea90: 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
eaa0: 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
eab0: 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
eac0: 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
ead0: 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
eae0: 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
eaf0: 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
eb00: 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
eb10: 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
eb20: 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
eb30: 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
eb40: 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
eb50: 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
eb60: 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
eb70: 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
eb80: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
eb90: 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
eba0: 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
ebb0: 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
ebc0: 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
ebd0: 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
ebe0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
ebf0: 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
ec00: 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
ec10: 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
ec20: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
ec30: 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
ec40: 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
ec50: 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
ec60: 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
ec70: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
ec80: 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
ec90: 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
eca0: 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
ecb0: 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
ecc0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
ecd0: 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
ece0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
ecf0: 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
ed00: 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
ed10: 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
ed20: 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
ed30: 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
ed40: 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
ed50: 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
ed60: 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
ed70: 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
ed80: 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
ed90: 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
eda0: 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
edb0: 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
edc0: 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
edd0: 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
ede0: 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
edf0: 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
ee00: 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
ee10: 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
ee20: 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
ee30: 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
ee40: 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
ee50: 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
ee60: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
ee70: 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
ee80: 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
ee90: 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
eea0: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
eeb0: 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
eec0: 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
eed0: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
eee0: 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
eef0: 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
ef00: 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
ef10: 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
ef20: 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
ef30: 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
ef40: 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
ef50: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
ef60: 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
ef70: 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
ef80: 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
ef90: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
efa0: 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
efb0: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
efc0: 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
efd0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
efe0: 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
eff0: 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
f000: 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
f010: 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
f020: 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
f030: 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
f040: 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
f050: 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
f060: 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
f070: 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
f080: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
f090: 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
f0a0: 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
f0b0: 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
f0c0: 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
f0d0: 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
f0e0: 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
f0f0: 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
f100: 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
f110: 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
f120: 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
f130: 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
f140: 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
f150: 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
f160: 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
f170: 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
f180: 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
f190: 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
f1a0: 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
f1b0: 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
f1c0: 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
f1d0: 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
f1e0: 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
f1f0: 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
f200: 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
f210: 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
f220: 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
f230: 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
f240: 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
f250: 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
f260: 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
f270: 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
f280: 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
f290: 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
f2a0: 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
f2b0: 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
f2c0: 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
f2d0: 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
f2e0: 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
f2f0: 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
f300: 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
f310: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
f320: 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
f330: 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
f340: 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
f350: 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
f360: 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
f370: 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
f380: 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
f390: 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
f3a0: 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
f3b0: 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
f3c0: 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
f3d0: 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
f3e0: 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
f3f0: 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
f400: 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
f410: 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
f420: 6e 20 6b 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68  n key..** .** Th
f430: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
f440: 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
f450: 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
f460: 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
f470: 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
f480: 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
f490: 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
f4a0: 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
f4b0: 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
f4c0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
f4d0: 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
f4e0: 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
f4f0: 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
f500: 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
f510: 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
f520: 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
f530: 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
f540: 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
f550: 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
f560: 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
f570: 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
f580: 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
f590: 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
f5a0: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
f5b0: 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
f5c0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
f5d0: 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
f5e0: 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
f5f0: 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
f600: 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
f610: 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
f620: 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
f630: 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
f640: 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
f650: 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
f660: 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
f670: 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
f680: 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
f690: 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
f6a0: 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
f6b0: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
f6c0: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
f6d0: 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
f6e0: 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
f6f0: 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
f700: 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
f710: 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
f720: 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
f730: 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
f740: 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
f750: 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
f760: 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
f770: 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
f780: 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
f790: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
f7a0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
f7b0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
f7c0: 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
f7d0: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
f7e0: 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
f7f0: 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
f800: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
f810: 72 6f 6c 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70  rol the .** comp
f820: 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
f830: 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
f840: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
f850: 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
f860: 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
f870: 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
f880: 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
f890: 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
f8a0: 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
f8b0: 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
f8c0: 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
f8d0: 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
f8e0: 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
f8f0: 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
f900: 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
f910: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
f920: 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
f930: 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
f940: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
f950: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
f960: 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
f970: 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
f980: 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
f990: 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
f9a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
f9b0: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
f9c0: 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
f9d0: 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  XField;        /
f9e0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
f9f0: 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b  mns beyond the k
fa00: 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ey columns */.  
fa10: 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
fa20: 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
fa30: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
fa40: 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
fa50: 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
fa60: 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
fa70: 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
fa80: 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
fa90: 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
faa0: 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
fab0: 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
fac0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
fad0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
fae0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
faf0: 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
fb00: 74 69 6f 6e 20 61 62 6f 75 74 20 61 0a 2a 2a 20  tion about a.** 
fb10: 73 69 6e 67 6c 65 20 69 6e 64 65 78 20 72 65 63  single index rec
fb20: 6f 72 64 20 74 68 61 74 20 68 61 73 20 61 6c 72  ord that has alr
fb30: 65 61 64 79 20 62 65 65 6e 20 70 61 72 73 65 64  eady been parsed
fb40: 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69   out into indivi
fb50: 64 75 61 6c 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  dual.** values..
fb60: 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
fb70: 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
fb80: 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
fb90: 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
fba0: 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
fbb0: 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
fbc0: 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
fbd0: 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
fbe0: 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
fbf0: 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
fc00: 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
fc10: 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
fc20: 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
fc30: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
fc40: 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
fc50: 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
fc60: 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
fc70: 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
fc80: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  code..**.** This
fc90: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
fca0: 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 68   a record that h
fcb0: 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  as already been 
fcc0: 64 69 73 61 73 73 65 6d 62 6c 65 64 0a 2a 2a 20  disassembled.** 
fcd0: 69 6e 74 6f 20 69 74 73 20 63 6f 6e 73 74 69 74  into its constit
fce0: 75 65 6e 74 20 66 69 65 6c 64 73 2e 0a 2a 2f 0a  uent fields..*/.
fcf0: 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
fd00: 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
fd10: 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
fd20: 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
fd30: 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
fd40: 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 6e  ation */.  u16 n
fd50: 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
fd60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
fd70: 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a  ies in apMem[] *
fd80: 2f 0a 20 20 75 38 20 66 6c 61 67 73 3b 20 20 20  /.  u8 flags;   
fd90: 20 20 20 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65          /* Boole
fda0: 61 6e 20 73 65 74 74 69 6e 67 73 2e 20 20 55 4e  an settings.  UN
fdb0: 50 41 43 4b 45 44 5f 2e 2e 2e 20 62 65 6c 6f 77  PACKED_... below
fdc0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
fdd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
fde0: 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ues */.};../*.**
fdf0: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
fe00: 6f 66 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of UnpackedRecor
fe10: 64 2e 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  d.flags.*/.#defi
fe20: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 49 4e 43 52  ne UNPACKED_INCR
fe30: 4b 45 59 20 20 20 20 20 20 20 30 78 30 31 20 20  KEY       0x01  
fe40: 2f 2a 20 4d 61 6b 65 20 74 68 69 73 20 6b 65 79  /* Make this key
fe50: 20 61 6e 20 65 70 73 69 6c 6f 6e 20 6c 61 72 67   an epsilon larg
fe60: 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e  er */.#define UN
fe70: 50 41 43 4b 45 44 5f 50 52 45 46 49 58 5f 4d 41  PACKED_PREFIX_MA
fe80: 54 43 48 20 20 30 78 30 32 20 20 2f 2a 20 41 20  TCH  0x02  /* A 
fe90: 70 72 65 66 69 78 20 6d 61 74 63 68 20 69 73 20  prefix match is 
fea0: 63 6f 6e 73 69 64 65 72 65 64 20 4f 4b 20 2a 2f  considered OK */
feb0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
fec0: 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
fed0: 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
fee0: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
fef0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
ff00: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
ff10: 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
ff20: 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
ff30: 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
ff40: 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
ff50: 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
ff60: 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
ff70: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
ff80: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
ff90: 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
ffa0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
ffb0: 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
ffc0: 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
ffd0: 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
ffe0: 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
fff0: 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
10000 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
10010 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
10020 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
10030 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
10040 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
10050 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
10060 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
10070 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
10080 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
10090 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
100a0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
100b0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
100c0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
100d0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
100e0 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
100f0 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
10100 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
10110 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
10120 20 74 68 65 20 0a 2a 2a 20 66 69 72 73 74 20 63   the .** first c
10130 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
10140 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
10150 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
10160 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
10170 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
10180 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
10190 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
101a0 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
101b0 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
101c0 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
101d0 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
101e0 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
101f0 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
10200 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
10210 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
10220 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
10230 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
10240 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
10250 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
10260 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
10270 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
10280 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
10290 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
102a0 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
102b0 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
102c0 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
102d0 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
102e0 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
102f0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 0a 2a 2a 20   resolution .** 
10300 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
10310 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
10320 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
10330 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
10340 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
10350 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  t..*/.struct Ind
10360 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
10370 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
10380 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
10390 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
103a0 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
103b0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
103c0 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
103d0 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
103e0 74 20 69 73 20 30 20 2a 2f 0a 20 20 74 52 6f 77  t is 0 */.  tRow
103f0 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20  cnt *aiRowEst;  
10400 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
10410 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
10420 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
10430 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
10440 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
10450 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
10460 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
10470 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
10480 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
10490 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
104a0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
104b0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
104c0 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
104d0 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
104e0 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
104f0 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
10500 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
10510 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
10520 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
10530 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
10540 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
10550 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
10560 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
10570 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
10580 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
10590 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 68 61  se==ASC */.  cha
105a0 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20  r **azColl;     
105b0 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
105c0 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
105d0 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
105e0 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
105f0 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
10600 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
10610 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
10620 6e 64 69 63 65 73 20 2a 2f 0a 20 20 4b 65 79 49  ndices */.  KeyI
10630 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
10640 20 20 20 20 20 2f 2a 20 41 20 4b 65 79 49 6e 66       /* A KeyInf
10650 6f 20 6f 62 6a 65 63 74 20 73 75 69 74 61 62 6c  o object suitabl
10660 65 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  e for this index
10670 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10690 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
106a0 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
106b0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
106c0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
106d0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
106e0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
106f0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
10700 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
10710 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
10720 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
10730 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
10740 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
10750 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
10760 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
10770 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
10780 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
10790 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
107a0 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
107b0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
107c0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
107d0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
107e0 64 20 61 75 74 6f 49 6e 64 65 78 3a 32 3b 20 20  d autoIndex:2;  
107f0 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
10800 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
10810 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
10820 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
10830 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
10840 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
10850 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
10860 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
10870 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
10880 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
10890 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
108a0 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
108b0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
108c0 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
108d0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
108e0 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
108f0 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
10900 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
10910 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
10920 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
10930 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
10940 69 6e 64 65 78 20 2a 2f 0a 23 69 66 64 65 66 20  index */.#ifdef 
10950 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
10960 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
10970 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
10980 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
10990 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
109a0 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
109b0 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
109c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
109d0 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
109e0 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
109f0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
10a00 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
10a10 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
10a20 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
10a30 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
10a40 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
10a50 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
10a60 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
10a70 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 23 65  t-most key */.#e
10a80 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ndif.};../*.** E
10a90 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
10aa0 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
10ab0 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
10ac0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
10ad0 6d 6f 72 79 20 0a 2a 2a 20 75 73 69 6e 67 20 61  mory .** using a
10ae0 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
10af0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
10b00 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
10b10 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
10b20 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
10b30 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
10b40 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
10b50 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
10b60 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
10b70 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
10b80 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
10b90 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
10ba0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
10bb0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
10bc0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
10bd0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
10be0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
10bf0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
10c00 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
10c10 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
10c20 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
10c30 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
10c40 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
10c50 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
10c60 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
10c70 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
10c80 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
10c90 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
10ca0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
10cb0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
10cc0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
10cd0 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
10ce0 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
10cf0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
10d00 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
10d10 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
10d20 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
10d30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
10d40 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
10d50 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
10d60 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
10d70 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
10d80 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
10d90 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
10da0 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
10db0 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
10dc0 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
10dd0 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
10de0 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
10df0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
10e00 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
10e10 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
10e20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
10e30 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
10e40 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
10e50 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
10e60 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
10e70 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
10e80 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
10e90 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
10ea0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
10eb0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
10ec0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
10ed0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
10ee0 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
10ef0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
10f00 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
10f10 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
10f20 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
10f30 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
10f40 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
10f50 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
10f60 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
10f70 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
10f80 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
10f90 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
10fa0 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
10fb0 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
10fc0 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
10fd0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
10fe0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
10ff0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
11000 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
11010 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
11020 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
11030 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
11040 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
11050 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
11060 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
11070 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
11080 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
11090 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
110a0 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
110b0 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
110c0 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
110d0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
110e0 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
110f0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
11100 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
11110 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
11120 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
11130 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
11160 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
11170 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
11180 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
11190 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
111a0 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
111b0 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
111c0 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
111d0 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
11200 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
11210 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
11220 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
11230 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
11240 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
11250 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
11260 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
11270 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
11280 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
11290 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
112a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
112b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
112c0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
112d0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 4c  index */.  ExprL
112e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
112f0 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
11300 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
11310 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
11320 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
11330 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
11340 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
11350 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
11360 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
11370 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
11380 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
11390 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
113a0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
113b0 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
113c0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
113d0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
113e0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
113f0 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
11400 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
11410 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
11420 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
11430 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
11440 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
11450 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
11460 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
11470 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
11480 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
11490 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
114a0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
114b0 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
114c0 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
114d0 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
114e0 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
114f0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
11500 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11510 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
11520 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
11530 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
11540 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11550 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
11560 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
11570 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
115a0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
115b0 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
115c0 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
115f0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
11600 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
11610 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
11620 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
11630 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
11640 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
11650 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
11660 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
11670 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
11680 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
11690 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
116a0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
116b0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
116c0 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
116d0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
116e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
116f0 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
11700 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
11710 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
11720 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
11730 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
11740 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
11750 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
11760 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
11770 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
11780 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11790 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
117a0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
117b0 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
117c0 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
117d0 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
117e0 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
117f0 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
11800 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
11810 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
11820 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
11830 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
11840 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
11850 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
11860 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
11870 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
11880 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
11890 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
118a0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
118b0 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
118c0 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
118d0 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
118e0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
118f0 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
11900 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
11910 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
11920 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
11930 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
11940 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
11950 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
11960 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11970 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
11980 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
11990 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
119a0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
119b0 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
119c0 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
119d0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
119e0 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
119f0 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
11a00 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
11a10 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
11a20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
11a30 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
11a40 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
11a50 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
11a60 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
11a70 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
11a80 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
11a90 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
11aa0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
11ab0 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
11ac0 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
11ad0 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
11ae0 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
11af0 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
11b00 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
11b10 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
11b20 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
11b30 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
11b40 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
11b50 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
11b60 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
11b70 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
11b80 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
11b90 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
11ba0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
11bb0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
11bc0 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
11bd0 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
11be0 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
11bf0 4c 4f 42 2c 20 0a 2a 2a 20 6f 72 20 54 4b 5f 53  LOB, .** or TK_S
11c00 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
11c10 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
11c20 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
11c30 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
11c40 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
11c50 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
11c60 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
11c70 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
11c80 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 0a 2a 2a  contains the .**
11c90 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
11ca0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
11cb0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
11cc0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
11cd0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
11ce0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
11cf0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
11d00 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
11d10 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
11d20 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
11d30 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
11d40 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
11d50 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
11d60 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
11d70 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
11d80 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
11d90 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
11da0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
11db0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
11dc0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
11dd0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
11de0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
11df0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
11e00 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
11e10 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
11e20 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
11e30 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
11e40 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
11e50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
11e60 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
11e70 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
11e80 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
11e90 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
11ea0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
11eb0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
11ec0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
11ed0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
11ee0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
11ef0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
11f00 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
11f10 73 74 20 69 73 20 0a 2a 2a 20 76 61 6c 69 64 2e  st is .** valid.
11f20 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73  .**.** An expres
11f30 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
11f40 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66   ID or ID.ID ref
11f50 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20  ers to a column 
11f60 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46  in a table..** F
11f70 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69  or such expressi
11f80 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20  ons, Expr.op is 
11f90 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e  set to TK_COLUMN
11fa0 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65   and Expr.iTable
11fb0 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67   is.** the integ
11fc0 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  er cursor number
11fd0 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f   of a VDBE curso
11fe0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
11ff0 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20  at table and.** 
12000 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20  Expr.iColumn is 
12010 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65  the column numbe
12020 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  r for the specif
12030 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74  ic column.  If t
12040 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  he.** expression
12050 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65   is used as a re
12060 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65  sult in an aggre
12070 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65  gate SELECT, the
12080 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
12090 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e  s also stored in
120a0 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63   the Expr.iAgg c
120b0 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67  olumn in the agg
120c0 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a  regate so that.*
120d0 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65  * it can be acce
120e0 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61  ssed after all a
120f0 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f  ggregates are co
12100 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mputed..**.** If
12110 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
12120 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61  is an unbound va
12130 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61  riable marker (a
12140 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 20 0a   question mark .
12150 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
12160 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
12170 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
12180 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
12190 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 6e   the index .** n
121a0 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76  umber for that v
121b0 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  ariable..**.** I
121c0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
121d0 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74   is a subquery t
121e0 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  hen Expr.iColumn
121f0 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
12200 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75  r.** register nu
12210 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mber containing 
12220 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  the result of th
12230 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20  e subquery.  If 
12240 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20  the.** subquery 
12250 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74  gives a constant
12260 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54   result, then iT
12270 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20  able is -1.  If 
12280 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20  the subquery.** 
12290 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e  gives a differen
122a0 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66  t answer at diff
122b0 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69  erent times duri
122c0 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f  ng statement pro
122d0 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20  cessing.** then 
122e0 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64  iTable is the ad
122f0 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f  dress of a subro
12300 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75  utine that compu
12310 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79  tes the subquery
12320 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
12330 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f  xpr is of type O
12340 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68  P_Column, and th
12350 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65  e table it is se
12360 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20  lecting from.** 
12370 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20  is a disk table 
12380 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70  or the "old.*" p
12390 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65  seudo-table, the
123a0 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f  n pTab points to
123b0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
123c0 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69  nding table defi
123d0 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c  nition..**.** AL
123e0 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a  LOCATION NOTES:.
123f0 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63  **.** Expr objec
12400 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74  ts can use a lot
12410 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
12420 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68   in database sch
12430 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70  ema.  To.** help
12440 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72   reduce memory r
12450 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d  equirements, som
12460 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f  etimes an Expr o
12470 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a  bject will be.**
12480 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64   truncated.  And
12490 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e   to reduce the n
124a0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
124b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d  allocations, som
124c0 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72  etimes.** two or
124d0 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63   more Expr objec
124e0 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  ts will be store
124f0 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65  d in a single me
12500 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c  mory allocation,
12510 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74  .** together wit
12520 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74  h Expr.zToken st
12530 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  rings..**.** If 
12540 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61  the EP_Reduced a
12550 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  nd EP_TokenOnly 
12560 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68  flags are set wh
12570 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62  en.** an Expr ob
12580 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65  ject is truncate
12590 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75  d.  When EP_Redu
125a0 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ced is set, then
125b0 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c   all.** the chil
125c0 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69  d Expr objects i
125d0 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74  n the Expr.pLeft
125e0 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74   and Expr.pRight
125f0 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65   subtrees.** are
12600 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
12610 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72  n the same memor
12620 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  y allocation.  N
12630 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68  ote, however, th
12640 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65  at.** the subtre
12650 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69  es in Expr.x.pLi
12660 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65  st or Expr.x.pSe
12670 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20  lect are always 
12680 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c  separately.** al
12690 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c  located, regardl
126a0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
126b0 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64  r not EP_Reduced
126c0 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75   is set..*/.stru
126d0 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f  ct Expr {.  u8 o
126e0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
126f0 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20     /* Operation 
12700 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69  performed by thi
12710 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72  s node */.  char
12720 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
12730 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
12740 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ty of the column
12750 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63   or 0 if not a c
12760 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66  olumn */.  u32 f
12770 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20  lags;           
12780 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61    /* Various fla
12790 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65  gs.  EP_* See be
127a0 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  low */.  union {
127b0 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65  .    char *zToke
127c0 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
127d0 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f  oken value. Zero
127e0 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20   terminated and 
127f0 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20  dequoted */.    
12800 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20  int iValue;     
12810 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65         /* Non-ne
12820 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76  gative integer v
12830 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61  alue if EP_IntVa
12840 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20  lue */.  } u;.. 
12850 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f   /* If the EP_To
12860 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20  kenOnly flag is 
12870 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e  set in the Expr.
12880 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
12890 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69   no.  ** space i
128a0 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
128b0 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77  the fields below
128c0 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20   this point. An 
128d0 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20  attempt to.  ** 
128e0 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c  access them will
128f0 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67   result in a seg
12900 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63  fault or malfunc
12910 74 69 6f 6e 2e 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a  tion. .  *******
12920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12940 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
12960 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
12970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
12980 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
12990 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
129a0 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
129b0 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
129c0 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
129d0 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
129e0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
129f0 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
12a00 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
12a10 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
12a20 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
12a30 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
12a40 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
12a50 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
12a60 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
12a70 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
12a80 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
12a90 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
12aa0 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
12ab0 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
12ac0 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
12ad0 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
12ae0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
12af0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
12b00 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
12b10 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
12b20 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
12b30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12b40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12b70 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
12b80 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
12b90 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
12ba0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
12bb0 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
12bc0 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
12bd0 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
12be0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
12bf0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
12c00 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
12c10 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
12c20 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
12c50 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
12c60 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
12c70 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
12c80 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
12c90 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
12cc0 6b 65 6c 79 3a 20 20 31 30 30 30 20 74 69 6d 65  kely:  1000 time
12cd0 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a  s likelihood */.
12ce0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
12cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
12d00 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
12d10 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
12d20 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12d40 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
12d50 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
12d60 77 61 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20  ways >= 1). */. 
12d70 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
12d80 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
12d90 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
12da0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
12db0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
12dc0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
12dd0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
12de0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
12df0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
12e00 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12e20 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
12e30 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
12e40 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
12e70 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
12e80 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ea0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
12eb0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
12ec0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
12ed0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
12ee0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
12ef0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
12f00 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
12f10 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
12f20 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
12f30 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
12f40 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
12f50 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
12f60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
12f70 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
12f80 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
12f90 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
12fa0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
12fb0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
12fc0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 64 20 69 6e  /* Originated in
12fd0 20 4f 4e 20 6f 72 20 55 53 49 4e 47 20 63 6c 61   ON or USING cla
12fe0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
12ff0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
13000 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
13010 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
13020 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
13030 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
13040 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65  efine EP_Resolve
13050 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49  d  0x000004 /* I
13060 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  Ds have been res
13070 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73  olved to COLUMNs
13080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45   */.#define EP_E
13090 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30  rror     0x00000
130a0 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20  8 /* Expression 
130b0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
130c0 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23  more errors */.#
130d0 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e  define EP_Distin
130e0 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20  ct  0x000010 /* 
130f0 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  Aggregate functi
13100 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54  on with DISTINCT
13110 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
13120 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74  ine EP_VarSelect
13130 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65   0x000020 /* pSe
13140 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74  lect is correlat
13150 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74  ed, not constant
13160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
13170 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34  blQuoted 0x00004
13180 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73  0 /* token.z was
13190 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22   originally in "
131a0 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ..." */.#define 
131b0 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30  EP_InfixFunc 0x0
131c0 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f  00080 /* True fo
131d0 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74  r an infix funct
131e0 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c  ion: LIKE, GLOB,
131f0 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20   etc */.#define 
13200 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30  EP_Collate   0x0
13210 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00100 /* Tree co
13220 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c  ntains a TK_COLL
13230 41 54 45 20 6f 70 65 61 72 74 6f 72 20 2a 2f 0a  ATE opeartor */.
13240 20 20 20 20 20 20 2f 2a 20 75 6e 75 73 65 64 20        /* unused 
13250 20 20 20 20 20 30 78 30 30 30 32 30 30 20 2a 2f       0x000200 */
13260 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
13270 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
13280 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
13290 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
132a0 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
132b0 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
132c0 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
132d0 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
132e0 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
132f0 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
13300 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
13310 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
13320 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
13330 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
13340 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
13350 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
13360 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
13370 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
13380 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
13390 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
133a0 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
133b0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
133c0 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
133d0 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
133e0 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
133f0 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
13400 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
13410 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
13420 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
13430 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
13440 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
13450 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
13460 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
13470 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
13480 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
13490 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
134a0 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
134b0 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
134c0 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
134d0 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
134e0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
134f0 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
13500 61 6e 74 20 20 30 78 30 38 30 30 30 30 20 2f 2a  ant  0x080000 /*
13510 20 4e 6f 64 65 20 69 73 20 61 20 63 6f 6e 73 74   Node is a const
13520 61 6e 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ant */../*.** Th
13530 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
13540 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
13550 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
13560 74 73 20 69 6e 20 74 68 65 20 0a 2a 2a 20 45 78  ts in the .** Ex
13570 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
13580 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
13590 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
135a0 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
135b0 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
135c0 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
135d0 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
135e0 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
135f0 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
13600 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
13610 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
13620 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
13630 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
13640 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
13650 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
13660 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
13670 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
13680 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
13690 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
136a0 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
136b0 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
136c0 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
136d0 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
136e0 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
136f0 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
13700 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
13710 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
13720 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
13730 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
13740 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
13750 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
13760 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
13770 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
13780 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
13790 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
137a0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
137b0 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
137c0 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 20  y a normal Expr 
137d0 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45  .** struct, an E
137e0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
137f0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
13800 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e  lag set in Expr.
13810 66 6c 61 67 73 20 0a 2a 2a 20 61 6e 64 20 61 6e  flags .** and an
13820 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
13830 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
13840 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
13850 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
13860 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
13870 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
13880 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
13890 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
138a0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
138b0 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
138c0 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
138d0 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
138e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
138f0 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
13900 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
13910 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
13920 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
13930 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
13940 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
13950 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
13960 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
13970 61 64 65 72 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a  ader comment .**
13980 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
13990 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
139a0 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
139b0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
139c0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
139d0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
139e0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
139f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
13a00 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
13a10 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
13a20 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
13a30 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
13a40 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
13a50 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
13a60 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
13a70 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
13a80 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
13a90 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
13aa0 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
13ab0 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
13ac0 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
13ad0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
13ae0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
13af0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
13b00 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
13b10 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
13b20 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
13b30 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
13b40 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
13b50 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
13b60 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
13b70 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
13b80 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
13b90 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
13ba0 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
13bb0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
13bc0 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
13bd0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
13be0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
13bf0 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
13c00 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
13c10 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
13c20 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
13c30 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
13c40 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
13c50 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
13c60 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
13c70 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
13c80 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
13c90 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
13ca0 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
13cb0 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
13cc0 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
13cd0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
13ce0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
13cf0 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
13d00 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
13d10 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
13d20 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
13d30 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
13d40 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
13d50 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
13d60 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
13d70 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
13d80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13d90 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
13da0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
13db0 20 69 45 43 75 72 73 6f 72 3b 20 20 20 20 20 20   iECursor;      
13dc0 20 20 20 20 2f 2a 20 56 44 42 45 20 43 75 72 73      /* VDBE Curs
13dd0 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  or associated wi
13de0 74 68 20 74 68 69 73 20 45 78 70 72 4c 69 73 74  th this ExprList
13df0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70   */.  struct Exp
13e00 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20  rList_item { /* 
13e10 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73  For each express
13e20 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20  ion in the list 
13e30 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
13e40 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  pr;            /
13e50 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78  * The list of ex
13e60 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20  pressions */.   
13e70 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
13e80 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
13e90 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
13ea0 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
13eb0 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
13ec0 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
13ed0 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
13ee0 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
13ef0 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
13f00 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
13f10 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
13f20 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
13f30 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
13f40 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
13f50 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
13f60 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
13f70 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
13f80 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
13f90 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
13fa0 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
13fb0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
13fc0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
13fd0 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
13fe0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
13ff0 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
14000 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
14010 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
14020 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
14030 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
14040 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
14050 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
14060 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
14070 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
14080 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
14090 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
140a0 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
140b0 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
140c0 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
140d0 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
140e0 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
140f0 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
14100 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
14110 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20  ;.  } *a;       
14120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
14130 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74  loc a power of t
14140 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71  wo greater or eq
14150 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a  ual to nExpr */.
14160 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
14170 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
14180 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
14190 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
141a0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
141b0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
141c0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
141d0 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
141e0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
141f0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
14200 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
14210 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
14220 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
14230 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
14240 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
14250 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
14260 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
14270 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
14280 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
14290 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
142a0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
142b0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
142c0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
142d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
142e0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
142f0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
14300 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
14310 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
14320 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
14330 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
14340 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
14350 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
14360 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
14370 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
14380 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
14390 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
143a0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
143b0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
143c0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
143d0 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
143e0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
143f0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
14400 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
14410 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
14420 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
14430 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
14440 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
14450 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
14460 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
14470 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
14480 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
14490 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
144a0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
144b0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
144c0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
144d0 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
144e0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
144f0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
14500 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
14510 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
14520 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
14530 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
14540 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
14550 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
14560 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
14570 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
14580 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
14590 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
145a0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
145b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
145c0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
145d0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
145e0 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
145f0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
14600 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
14610 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
14620 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
14630 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
14640 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
14650 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
14660 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
14670 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
14680 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
14690 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
146a0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
146b0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
146c0 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
146d0 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
146e0 2a 2f 0a 74 79 70 65 64 65 66 20 75 36 34 20 42  */.typedef u64 B
146f0 69 74 6d 61 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54  itmask;../*.** T
14700 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
14710 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
14720 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
14730 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
14740 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
14750 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
14760 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
14770 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
14780 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
14790 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
147a0 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f  mask)1)<<(n))../
147b0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
147c0 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
147d0 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
147e0 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
147f0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
14800 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
14810 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
14820 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
14830 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
14840 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
14850 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
14860 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
14870 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
14880 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
14890 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
148a0 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
148b0 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
148c0 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
148d0 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
148e0 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
148f0 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
14900 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
14910 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
14920 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
14930 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
14940 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
14950 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
14960 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
14970 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
14980 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
14990 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
149a0 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
149b0 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
149c0 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
149d0 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
149e0 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
149f0 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
14a00 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
14a10 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
14a20 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
14a30 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
14a40 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
14a50 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
14a60 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
14a70 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
14a80 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
14a90 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
14aa0 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
14ab0 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
14ac0 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
14ad0 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
14ae0 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
14af0 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
14b00 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
14b10 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
14b20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
14b30 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
14b40 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
14b50 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
14b60 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
14b70 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
14b80 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
14b90 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
14ba0 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 75 38  t SrcList {.  u8
14bb0 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
14bc0 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
14bd0 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
14be0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
14bf0 73 65 20 2a 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f  se */.  u8 nAllo
14c00 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
14c10 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
14c20 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
14c30 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
14c40 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
14c50 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
14c60 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
14c70 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
14c80 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
14c90 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
14ca0 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
14cb0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
14cc0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
14cd0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
14ce0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14cf0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
14d00 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
14d10 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
14d20 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
14d30 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
14d40 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
14d50 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
14d60 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
14d70 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
14d80 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
14d90 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
14da0 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
14db0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
14dc0 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
14dd0 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
14de0 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
14df0 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
14e00 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
14e10 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
14e20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
14e30 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
14e40 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
14e50 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
14e60 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
14e70 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20    u8 jointype;  
14e80 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a      /* Type of j
14e90 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73  oin between this
14ea0 20 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72   able and the pr
14eb0 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 75 6e  evious */.    un
14ec0 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
14ed0 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
14ee0 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
14ef0 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
14f00 65 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  e */.    unsigne
14f10 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
14f20 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
14f30 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
14f40 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 75 6e  elated */.    un
14f50 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74  signed viaCorout
14f60 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c  ine :1;  /* Impl
14f70 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d  emented as a co-
14f80 72 6f 75 74 69 6e 65 20 2a 2f 0a 23 69 66 6e 64  routine */.#ifnd
14f90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
14fa0 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53  XPLAIN.    u8 iS
14fb0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20  electId;     /* 
14fc0 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74  If pSelect!=0, t
14fd0 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62  he id of the sub
14fe0 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a  -select in EQP *
14ff0 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74  /.#endif.    int
15000 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f   iCursor;      /
15010 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
15020 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f  r number used to
15030 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62   access this tab
15040 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  le */.    Expr *
15050 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  pOn;        /* T
15060 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20  he ON clause of 
15070 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64  a join */.    Id
15080 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20  List *pUsing;   
15090 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61  /* The USING cla
150a0 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f  use of a join */
150b0 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c  .    Bitmask col
150c0 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20  Used;  /* Bit N 
150d0 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f  (1<<N) set if co
150e0 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69  lumn N of pTab i
150f0 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63 68  s used */.    ch
15100 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20 20  ar *zIndex;     
15110 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
15120 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
15130 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
15140 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
15150 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64 65  ndex;    /* Inde
15160 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
15170 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49 6e  esponding to zIn
15180 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  dex, if any */. 
15190 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
151a0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
151b0 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
151c0 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
151d0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
151e0 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
151f0 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
15200 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
15210 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
15220 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
15230 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
15240 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
15250 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
15260 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
15270 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
15280 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
15290 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
152a0 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
152b0 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
152c0 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
152d0 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
152e0 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
152f0 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
15300 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
15310 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
15320 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
15330 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
15340 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
15350 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
15360 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
15370 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
15380 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
15390 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
153a0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
153b0 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
153c0 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
153d0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
153e0 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
153f0 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
15400 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
15410 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
15420 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
15430 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
15440 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65 66   member..*/.#def
15450 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
15460 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30 30  Y_NORMAL   0x000
15470 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64  0 /* No-op */.#d
15480 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
15490 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78 30  RBY_MIN      0x0
154a0 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  001 /* ORDER BY 
154b0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
154c0 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  in() func */.#de
154d0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
154e0 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30 30  BY_MAX      0x00
154f0 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70  02 /* ORDER BY p
15500 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 61  rocessing for ma
15510 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66  x() func */.#def
15520 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
15530 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30 30  S_DESIRED  0x000
15540 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20  4 /* Want to do 
15550 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45 2f  one-pass UPDATE/
15560 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
15570 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
15580 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38 20  ES_OK    0x0008 
15590 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
155a0 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
155b0 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
155c0 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f  WHERE_OMIT_OPEN_
155d0 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f 2a  CLOSE  0x0010 /*
155e0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20 61   Table cursors a
155f0 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  re already open 
15600 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
15610 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20 20  _FORCE_TABLE    
15620 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20 6e    0x0020 /* Do n
15630 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2d  ot use an index-
15640 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a 23  only search */.#
15650 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
15660 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30 78  TABLE_ONLY    0x
15670 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64  0040 /* Only cod
15680 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65 20  e the 1st table 
15690 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a 23  in pTabList */.#
156a0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e 44  define WHERE_AND
156b0 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30 78  _ONLY         0x
156c0 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75 73  0080 /* Don't us
156d0 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f 52  e indices for OR
156e0 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
156f0 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
15700 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30 20           0x0100 
15710 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
15720 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
15730 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15740 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
15750 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f 72     0x0200 /* pOr
15760 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
15770 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
15780 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
15790 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
157a0 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41 6c      0x0400 /* Al
157b0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
157c0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
157d0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
157e0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
157f0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
15800 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
15810 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
15820 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
15830 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
15840 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
15850 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
15860 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
15870 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
15880 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
15890 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
158a0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
158b0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
158c0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
158d0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
158e0 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
158f0 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
15900 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
15910 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
15920 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
15930 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
15940 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
15950 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
15960 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
15970 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
15980 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
15990 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
159a0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
159b0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
159c0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
159d0 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
159e0 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
159f0 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
15a00 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
15a10 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
15a20 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
15a30 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
15a40 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
15a50 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
15a60 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
15a70 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
15a80 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
15a90 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
15aa0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
15ab0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
15ac0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
15ad0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
15ae0 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
15af0 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
15b00 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
15b10 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63  inner-most .** c
15b20 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
15b30 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
15b40 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
15b50 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
15b60 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
15b70 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
15b80 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
15b90 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
15ba0 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
15bb0 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
15bc0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
15bd0 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
15be0 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
15bf0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
15c00 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
15c10 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
15c20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
15c30 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
15c40 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
15c50 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
15c60 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61  ented. .**.** Ea
15c70 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
15c80 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
15c90 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
15ca0 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
15cb0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
15cc0 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
15cd0 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
15ce0 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
15cf0 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
15d00 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
15d10 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
15d20 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
15d30 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
15d40 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
15d50 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
15d60 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
15d70 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
15d80 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
15d90 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
15da0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
15db0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
15dc0 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
15dd0 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
15de0 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
15df0 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
15e00 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
15e10 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
15e20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
15e30 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
15e40 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
15e50 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
15e60 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
15e70 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
15e80 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
15e90 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
15ea0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
15eb0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
15ec0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
15ed0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
15ee0 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
15ef0 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
15f00 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
15f10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15f20 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
15f30 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
15f40 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
15f50 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73 3b  */.  u8 ncFlags;
15f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
15f70 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
15f80 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
15f90 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
15fa0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
15fb0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
15fc0 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
15fd0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  d..*/.#define NC
15fe0 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31 20  _AllowAgg  0x01 
15ff0 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
16000 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
16010 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
16020 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20  efine NC_HasAgg 
16030 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 6e     0x02    /* On
16040 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
16050 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65  ate functions se
16060 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
16070 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34 20  _IsCheck   0x04 
16080 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
16090 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
160a0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
160b0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
160c0 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 38  C_InAggFunc 0x08
160d0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
160e0 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
160f0 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
16100 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
16110 50 61 72 74 49 64 78 20 20 20 30 78 31 30 20 20  PartIdx   0x10  
16120 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
16130 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c  olving a partial
16140 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a   index WHERE */.
16150 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
16160 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
16170 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
16180 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
16190 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
161a0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
161b0 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
161c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
161d0 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
161e0 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
161f0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
16200 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
16210 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
16220 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
16230 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
16240 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
16250 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
16260 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
16270 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
16280 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
16290 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
162a0 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
162b0 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
162c0 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
162d0 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
162e0 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
162f0 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
16300 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
16310 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
16320 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
16330 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
16340 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
16350 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
16360 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
16370 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
16380 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
16390 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
163a0 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
163b0 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
163c0 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
163d0 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
163e0 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
163f0 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
16400 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
16410 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
16420 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
16430 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
16440 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
16450 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
16460 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
16470 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
16480 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
16490 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
164a0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
164b0 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
164c0 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
164d0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
164e0 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
164f0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
16500 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
16510 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
16520 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
16530 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
16540 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
16550 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
16560 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
16570 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
16580 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
16590 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
165a0 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
165b0 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
165c0 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
165d0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
165e0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
165f0 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
16600 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
16610 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20 73  XCEPT */.  u16 s
16620 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
16630 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
16640 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
16650 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
16660 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
16670 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
16680 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
16690 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69 6e  counters */.  in
166a0 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 33  t addrOpenEphm[3
166b0 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45  ];   /* OP_OpenE
166c0 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c  phem opcodes rel
166d0 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ated to this sel
166e0 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53 65  ect */.  u64 nSe
166f0 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20 20  lectRow;        
16700 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
16710 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
16720 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ws */.  SrcList 
16730 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
16740 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
16750 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
16760 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
16770 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
16780 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
16790 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
167a0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
167b0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
167c0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
167d0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
167e0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
167f0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
16800 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
16810 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
16820 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
16830 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
16840 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
16850 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
16860 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
16870 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
16880 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
16890 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
168a0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53 65  compound */.  Se
168b0 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73 74  lect *pRightmost
168c0 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d 6f  ;    /* Right-mo
168d0 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  st select in a c
168e0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
168f0 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45 78  tatement */.  Ex
16900 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
16910 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
16920 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
16930 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
16940 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
16950 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
16960 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
16970 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
16980 75 73 65 64 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  used. */.};../*.
16990 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
169a0 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c  s for Select.sel
169b0 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22  Flags.  The "SF"
169c0 20 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66   prefix stands f
169d0 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c  or.** "Select Fl
169e0 61 67 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ag"..*/.#define 
169f0 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20  SF_Distinct     
16a00 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75     0x0001  /* Ou
16a10 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44  tput should be D
16a20 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69  ISTINCT */.#defi
16a30 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
16a40 20 20 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a        0x0002  /*
16a50 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
16a60 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
16a70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
16a80 67 72 65 67 61 74 65 20 20 20 20 20 20 20 30 78  gregate       0x
16a90 30 30 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0004  /* Contain
16aa0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
16ab0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
16ac0 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61   SF_UsesEphemera
16ad0 6c 20 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55  l   0x0008  /* U
16ae0 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65  ses the OpenEphe
16af0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a  meral opcode */.
16b00 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e  #define SF_Expan
16b10 64 65 64 20 20 20 20 20 20 20 20 30 78 30 30 31  ded        0x001
16b20 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c  0  /* sqlite3Sel
16b30 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c  ectExpand() call
16b40 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64  ed on this */.#d
16b50 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65  efine SF_HasType
16b60 49 6e 66 6f 20 20 20 20 20 30 78 30 30 32 30 20  Info     0x0020 
16b70 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72   /* FROM subquer
16b80 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d  ies have Table m
16b90 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  etadata */.#defi
16ba0 6e 65 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20  ne SF_UseSorter 
16bb0 20 20 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a        0x0040  /*
16bc0 20 53 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f   Sort using a so
16bd0 72 74 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rter */.#define 
16be0 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
16bf0 20 20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79     0x0080  /* Sy
16c00 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
16c10 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
16c20 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72  #define SF_Mater
16c30 69 61 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30  ialize     0x010
16c40 30 20 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65  0  /* Force mate
16c50 72 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76  rialization of v
16c60 69 65 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  iews */.#define 
16c70 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
16c80 20 20 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61     0x0200  /* Pa
16c90 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
16ca0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
16cb0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
16cc0 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20  MaybeConvert    
16cd0 30 78 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20  0x0400  /* Need 
16ce0 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
16cf0 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
16d00 29 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ) */.../*.** The
16d10 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 73 65   results of a se
16d20 6c 65 63 74 20 63 61 6e 20 62 65 20 64 69 73 74  lect can be dist
16d30 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
16d40 61 6c 20 77 61 79 73 2e 20 20 54 68 65 0a 2a 2a  al ways.  The.**
16d50 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
16d60 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
16d70 6c 74 20 54 79 70 65 22 2e 0a 2a 2f 0a 23 64 65  lt Type"..*/.#de
16d80 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
16d90 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
16da0 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
16db0 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
16dc0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
16dd0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
16de0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
16df0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
16e00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
16e10 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
16e20 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
16e30 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
16e40 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
16e50 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
16e60 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
16e70 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
16e80 6e 79 77 68 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54  nywhere */../* T
16e90 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
16ea0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
16eb0 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
16ec0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
16ed0 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
16ee0 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
16ef0 52 54 5f 44 69 73 63 61 72 64 29 0a 0a 23 64 65  RT_Discard)..#de
16f00 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20  fine SRT_Output 
16f10 20 20 20 20 20 20 35 20 20 2f 2a 20 4f 75 74 70        5  /* Outp
16f20 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72  ut each row of r
16f30 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
16f40 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
16f50 20 20 36 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    6  /* Store re
16f60 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79  sult in a memory
16f70 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65   cell */.#define
16f80 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
16f90 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
16fa0 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e  sults as keys in
16fb0 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
16fc0 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20  fine SRT_Table  
16fd0 20 20 20 20 20 20 38 20 20 2f 2a 20 53 74 6f 72        8  /* Stor
16fe0 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61  e result as data
16ff0 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74   with an automat
17000 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66  ic rowid */.#def
17010 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
17020 20 20 20 20 20 39 20 20 2f 2a 20 43 72 65 61 74       9  /* Creat
17030 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
17040 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
17050 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
17060 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
17070 65 20 20 20 31 30 20 20 2f 2a 20 47 65 6e 65 72  e   10  /* Gener
17080 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
17090 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f   of result */../
170a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
170b0 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
170c0 64 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20  describes where 
170d0 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65  to put of the re
170e0 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45  sults of.** a SE
170f0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
17100 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
17110 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73  Dest {.  u8 eDes
17120 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  t;         /* Ho
17130 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
17140 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
17150 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
17160 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 53 64   */.  char affSd
17170 73 74 3b 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  st;     /* Affin
17180 69 74 79 20 75 73 65 64 20 77 68 65 6e 20 65 44  ity used when eD
17190 65 73 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a  est==SRT_Set */.
171a0 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
171b0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
171c0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
171d0 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
171e0 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
171f0 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 42  dst;        /* B
17200 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65  ase register whe
17210 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77  re results are w
17220 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
17230 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  nSdst;        /*
17240 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
17250 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a  ters allocated *
17260 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
17270 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
17280 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
17290 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
172a0 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
172b0 45 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  ENT .** tables, 
172c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
172d0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
172e0 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
172f0 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
17300 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
17310 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
17320 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
17330 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
17340 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
17350 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
17360 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
17370 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
17380 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
17390 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
173a0 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
173b0 61 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20  are down within 
173c0 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
173d0 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
173e0 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
173f0 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
17400 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
17410 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
17420 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
17430 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
17440 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
17450 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
17460 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
17470 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
17480 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
17490 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
174a0 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
174b0 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
174c0 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
174d0 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
174e0 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
174f0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
17500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
17510 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
17520 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
17530 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
17540 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
17550 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
17560 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
17570 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
17580 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
17590 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
175a0 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
175b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
175c0 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
175d0 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
175e0 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
175f0 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
17600 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
17610 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
17620 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
17630 20 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72   for each .** tr
17640 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
17650 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
17660 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
17670 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
17680 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
17690 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
176a0 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
176b0 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
176c0 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
176d0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
176e0 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
176f0 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
17700 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
17710 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
17720 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
17730 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
17740 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
17750 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
17760 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
17770 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
17780 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
17790 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
177a0 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
177b0 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
177c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
177d0 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
177e0 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
177f0 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
17800 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
17810 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
17820 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
17830 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
17840 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
17850 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
17860 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
17870 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
17880 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
17890 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
178a0 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
178b0 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
178c0 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
178d0 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
178e0 74 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20  t of INSERT .** 
178f0 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
17900 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
17910 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
17920 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
17930 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
17940 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
17950 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
17960 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
17970 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
17980 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
17990 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
179a0 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
179b0 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
179c0 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
179d0 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
179e0 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
179f0 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
17a00 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
17a10 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
17a20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
17a30 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
17a40 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
17a50 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
17a60 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
17a70 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
17a80 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
17a90 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
17aa0 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
17ab0 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
17ac0 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
17ad0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
17ae0 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
17af0 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
17b00 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
17b10 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
17b20 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
17b30 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 73  D>30.  typedef s
17b40 71 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44  qlite3_uint64 yD
17b50 62 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74  bMask;.#else.  t
17b60 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
17b70 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e  int yDbMask;.#en
17b80 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
17b90 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
17ba0 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
17bb0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
17bc0 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
17bd0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
17be0 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
17bf0 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
17c00 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
17c10 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
17c20 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
17c30 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
17c40 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
17c50 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
17c60 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
17c70 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
17c80 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
17c90 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
17ca0 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
17cb0 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
17cc0 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
17cd0 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
17ce0 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
17cf0 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
17d00 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
17d10 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
17d20 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
17d30 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
17d40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
17d50 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
17d60 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
17d70 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
17d80 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
17d90 20 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20   .** feature is 
17da0 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
17db0 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
17dc0 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
17dd0 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
17de0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
17df0 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
17e00 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
17e10 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
17e20 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
17e30 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
17e40 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
17e50 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
17e60 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
17e70 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
17e80 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
17e90 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
17ea0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
17eb0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
17ec0 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
17ed0 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
17ee0 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
17ef0 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
17f00 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
17f10 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
17f20 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
17f30 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
17f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
17f50 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
17f60 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
17f70 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
17f80 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
17f90 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
17fa0 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
17fb0 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
17fc0 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
17fd0 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
17fe0 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
17ff0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
18000 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
18010 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18020 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
18030 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
18040 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
18050 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
18060 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
18070 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
18080 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
18090 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
180a0 6e 54 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20  nTempInUse;     
180b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
180c0 54 65 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e  TempReg[] curren
180d0 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20  tly checked out 
180e0 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68  */.  u8 nColCach
180f0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  e;        /* Num
18100 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
18110 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f  n aColCache[] */
18120 0a 20 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b  .  u8 iColCache;
18130 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
18140 65 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63  entry in aColCac
18150 68 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20  he[] to replace 
18160 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57  */.  u8 isMultiW
18170 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75  rite;     /* Tru
18180 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
18190 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74  ay modify/insert
181a0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
181b0 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b  /.  u8 mayAbort;
181c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
181d0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
181e0 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  y throw an ABORT
181f0 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
18200 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20  u8 hasCompound; 
18210 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20       /* Need to 
18220 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f  invoke convertCo
18230 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
18240 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 69 6e  bquery() */.  in
18250 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
18260 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
18270 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
18280 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
18290 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
182a0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
182b0 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
182c0 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
182d0 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
182e0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
182f0 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
18300 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
18310 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
18320 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
18330 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
18340 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
18350 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
18360 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
18370 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
18380 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
18390 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
183a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
183b0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
183c0 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
183d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
183e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
183f0 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
18400 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
18410 74 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20  t nOnce;        
18420 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18430 4f 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74  OP_Once instruct
18440 69 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ions so far */. 
18450 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
18460 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
18470 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
18480 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
18490 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
184a0 20 69 50 61 72 74 49 64 78 54 61 62 3b 20 20 20   iPartIdxTab;   
184b0 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 72 72 65    /* Table corre
184c0 73 70 6f 6e 64 69 6e 67 20 74 6f 20 61 20 70 61  sponding to a pa
184d0 72 74 69 61 6c 20 69 6e 64 65 78 20 2a 2f 0a 20  rtial index */. 
184e0 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
184f0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
18500 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
18510 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
18520 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
18530 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
18540 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
18550 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
18560 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
18570 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 73  ru values */.  s
18580 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
18590 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
185a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
185b0 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
185c0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
185d0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
185e0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
185f0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
18600 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
18610 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
18620 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
18630 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
18640 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
18650 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
18660 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
18670 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
18680 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
18690 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
186a0 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
186b0 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
186c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
186e0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
186f0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
18700 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
18710 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
18720 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
18730 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
18740 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
18750 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
18760 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
18770 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
18780 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
18790 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d    yDbMask writeM
187a0 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20  ask;   /* Start 
187b0 61 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74  a write transact
187c0 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74  ion on these dat
187d0 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d  abases */.  yDbM
187e0 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20  ask cookieMask; 
187f0 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73   /* Bitmask of s
18800 63 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64  chema verified d
18810 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e  atabases */.  in
18820 74 20 63 6f 6f 6b 69 65 47 6f 74 6f 3b 20 20 20  t cookieGoto;   
18830 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
18840 20 4f 50 5f 47 6f 74 6f 20 74 6f 20 63 6f 6f 6b   OP_Goto to cook
18850 69 65 20 76 65 72 69 66 69 65 72 20 73 75 62 72  ie verifier subr
18860 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20  outine */.  int 
18870 63 6f 6f 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49  cookieValue[SQLI
18880 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b  TE_MAX_ATTACHED+
18890 32 5d 3b 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f  2];  /* Values o
188a0 66 20 63 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72  f cookies to ver
188b0 69 66 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  ify */.  int reg
188c0 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a  Rowid;        /*
188d0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
188e0 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54  g rowid of CREAT
188f0 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f  E TABLE entry */
18900 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20  .  int regRoot; 
18910 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
18920 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74  ter holding root
18930 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72   page number for
18940 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a   new objects */.
18950 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20    int nMaxArg;  
18960 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72         /* Max ar
18970 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65  gs passed to use
18980 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75  r function by su
18990 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 54  b-program */.  T
189a0 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e  oken constraintN
189b0 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  ame;/* Name of t
189c0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75  he constraint cu
189d0 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61  rrently being pa
189e0 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
189f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
18a00 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
18a10 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
18a20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
18a30 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
18a40 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
18a50 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
18a60 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
18a70 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
18a80 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
18a90 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
18aa0 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
18ab0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
18ac0 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
18ad0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 0a 20 20   counters */..  
18ae0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  /* Information u
18af0 73 65 64 20 77 68 69 6c 65 20 63 6f 64 69 6e 67  sed while coding
18b00 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
18b10 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  s. */.  Parse *p
18b20 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20  Toplevel;    /* 
18b30 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
18b40 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d  for main program
18b50 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20   (or NULL) */.  
18b60 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54  Table *pTriggerT
18b70 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72  ab;  /* Table tr
18b80 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e 67  iggers are being
18b90 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20   coded for */.  
18ba0 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20 20  int addrCrTab;  
18bb0 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20       /* Address 
18bc0 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  of OP_CreateTabl
18bd0 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41  e opcode on CREA
18be0 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 69 6e  TE TABLE */.  in
18bf0 74 20 61 64 64 72 53 6b 69 70 50 4b 3b 20 20 20  t addrSkipPK;   
18c00 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
18c10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
18c20 73 6b 69 70 20 50 52 49 4d 41 52 59 20 4b 45 59  skip PRIMARY KEY
18c30 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 33 32 20   index */.  u32 
18c40 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
18c50 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
18c60 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
18c70 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
18c80 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
18c90 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
18ca0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
18cb0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
18cc0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
18cd0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
18ce0 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
18cf0 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
18d00 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
18d10 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
18d20 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
18d30 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
18d40 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
18d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
18d60 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
18d70 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
18d80 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
18d90 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
18da0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
18db0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
18dc0 2a 2f 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69  */..  /* Above i
18dd0 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
18de0 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
18df0 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
18e00 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
18e10 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
18e20 69 6f 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56  ion */..  int nV
18e30 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
18e40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18e50 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
18e60 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
18e70 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
18e80 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  zVar;           
18e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
18ea0 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74  f available slot
18eb0 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a  s in azVar[] */.
18ec0 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
18ed0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
18ee0 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
18ef0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
18f00 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
18f10 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
18f20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
18f30 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
18f40 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
18f50 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
18f60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18f70 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
18f80 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
18f90 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
18fa0 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
18fb0 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
18fc0 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18fe0 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
18ff0 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
19000 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
19010 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  nAlias;         
19020 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19030 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75 6c  of aliased resul
19040 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f  t set columns */
19050 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20  .  int nHeight; 
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19070 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20  Expression tree 
19080 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e  height of curren
19090 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a  t sub-select */.
190a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
190b0 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e  MIT_EXPLAIN.  in
190c0 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  t iSelectId;    
190d0 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66          /* ID of
190e0 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20   current select 
190f0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
19100 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78  ut */.  int iNex
19110 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20  tSelectId;      
19120 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61    /* Next availa
19130 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f  ble select ID fo
19140 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
19150 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68 61   */.#endif.  cha
19160 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20 20  r **azVar;      
19170 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
19180 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20 70  rs to names of p
19190 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 56  arameters */.  V
191a0 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
191b0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
191c0 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
191d0 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
191e0 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
191f0 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
19200 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
19210 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
19220 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
19230 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
19240 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
19250 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
19260 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
19270 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
19280 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
19290 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
192a0 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
192b0 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
192c0 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
192d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
192e0 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
192f0 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
19300 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
19310 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54 6f 6b  llbacks */.  Tok
19320 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
19330 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
19340 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
19350 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
19360 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ame */.  Token s
19370 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
19380 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
19390 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 23  oken parsed */.#
193a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
193b0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
193c0 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
193d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
193e0 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
193f0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
19400 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
19410 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
19420 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
19430 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
19440 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
19450 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
19460 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
19470 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
19480 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
19490 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
194a0 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
194b0 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
194c0 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
194d0 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
194e0 67 67 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ggers */.};../*.
194f0 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
19500 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69  f currently insi
19510 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65  de an sqlite3_de
19520 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c  clare_vtab() cal
19530 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  l..*/.#ifdef SQL
19540 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
19550 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20  TABLE.  #define 
19560 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20  IN_DECLARE_VTAB 
19570 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  0.#else.  #defin
19580 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
19590 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61  B (pParse->decla
195a0 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a  reVtab).#endif..
195b0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
195c0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
195d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  ng structure can
195e0 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20   be declared on 
195f0 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64  a stack and used
19600 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20  .** to save the 
19610 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
19620 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74  xt value so that
19630 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f   it can be resto
19640 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74  red later..*/.st
19650 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
19660 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
19670 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20  *zAuthContext;  
19680 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61   /* Put saved Pa
19690 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74  rse.zAuthContext
196a0 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65   here */.  Parse
196b0 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
196c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61         /* The Pa
196d0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  rse structure */
196e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69  .};../*.** Bitfi
196f0 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35  eld flags for P5
19700 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75   value in variou
19710 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a  s opcodes..**.**
19720 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
19730 61 6c 75 65 73 20 66 6f 72 20 49 53 4e 4f 4f 50  alues for ISNOOP
19740 20 61 6e 64 20 4c 45 4e 47 54 48 41 52 47 20 61   and LENGTHARG a
19750 72 65 20 74 68 65 20 73 61 6d 65 2e 20 20 42 75  re the same.  Bu
19760 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73 65 20 62  t as .** those b
19770 69 74 73 20 61 72 65 20 6e 65 76 65 72 20 75 73  its are never us
19780 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 6f  ed on the same o
19790 70 63 6f 64 65 2c 20 74 68 65 20 6f 76 65 72 6c  pcode, the overl
197a0 61 70 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 0a  ap is harmless..
197b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
197c0 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20  G_NCHANGE       
197d0 30 78 30 31 20 20 20 20 2f 2a 20 53 65 74 20 74  0x01    /* Set t
197e0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
197f0 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ange */.#define 
19800 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
19810 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
19820 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
19830 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
19840 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
19850 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
19860 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
19870 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
19880 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
19890 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
198a0 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
198b0 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
198c0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
198d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
198e0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
198f0 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
19900 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
19910 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
19920 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
19930 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 20 20  AG_CLEARCACHE   
19940 20 30 78 32 30 20 20 20 20 2f 2a 20 43 6c 65 61   0x20    /* Clea
19950 72 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  r pseudo-table c
19960 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f 6c 75 6d  ache in OP_Colum
19970 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
19980 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
19990 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
199a0 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
199b0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
199c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
199d0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
199e0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x40    /* OP_C
199f0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
19a00 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a  for length() */.
19a10 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54  #define OPFLAG_T
19a20 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38  YPEOFARG     0x8
19a30 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
19a40 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
19a50 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66  typeof() */.#def
19a60 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  ine OPFLAG_BULKC
19a70 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20  SR       0x01   
19a80 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73   /* OP_Open** us
19a90 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20  ed to open bulk 
19aa0 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  cursor */.#defin
19ab0 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
19ac0 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f         0x02    /
19ad0 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
19ae0 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
19af0 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
19b00 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
19b10 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
19b20 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
19b30 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
19b40 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  n */../*. * Each
19b50 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
19b60 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
19b70 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
19b80 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
19b90 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
19ba0 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a 20 50 6f  igger. . *. * Po
19bb0 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
19bc0 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
19bd0 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
19be0 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
19bf0 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
19c00 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
19c10 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
19c20 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
19c30 65 73 65 6e 74 73 20 74 68 65 20 0a 20 2a 20 20  esents the . *  
19c40 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
19c50 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
19c60 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
19c70 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
19c80 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
19c90 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
19ca0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
19cb0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
19cc0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
19cd0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
19ce0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
19cf0 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
19d00 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
19d10 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
19d20 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
19d30 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
19d40 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
19d50 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
19d60 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
19d70 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
19d80 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
19d90 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
19da0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
19db0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
19dc0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
19dd0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
19de0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
19df0 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
19e00 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
19e10 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
19e20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19e30 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
19e40 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
19e50 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
19e60 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
19e70 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
19e80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
19e90 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
19ea0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
19eb0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
19ec0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
19ed0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
19ee0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
19ef0 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
19f00 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
19f10 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
19f20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
19f30 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
19f40 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
19f50 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
19f60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19f70 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
19f80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
19f90 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
19fa0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
19fb0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
19fc0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
19fd0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
19fe0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
1a010 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
1a020 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
1a030 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
1a040 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
1a050 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1a060 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
1a070 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
1a080 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
1a090 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
1a0a0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
1a0b0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
1a0c0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
1a0d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
1a0e0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
1a0f0 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
1a100 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1a110 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
1a120 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
1a130 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
1a140 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
1a150 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
1a160 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
1a170 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
1a180 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
1a190 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
1a1a0 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hich. .**.** If 
1a1b0 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
1a1c0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
1a1d0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
1a1e0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
1a1f0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
1a200 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
1a210 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
1a220 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
1a230 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
1a240 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
1a250 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
1a260 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
1a270 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
1a280 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
1a290 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
1a2a0 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
1a2b0 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
1a2c0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
1a2d0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
1a2e0 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63  . . *. * Instanc
1a2f0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
1a300 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f  ggerStep are sto
1a310 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20  red in a singly 
1a320 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e  linked list (lin
1a330 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65  ked. * using the
1a340 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29   "pNext" member)
1a350 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74   referenced by t
1a360 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d  he "step_list" m
1a370 65 6d 62 65 72 20 6f 66 20 74 68 65 20 0a 20 2a  ember of the . *
1a380 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
1a390 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
1a3a0 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
1a3b0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
1a3c0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
1a3d0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
1a3e0 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
1a3f0 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a 20 54 68  ogram.. * . * Th
1a400 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
1a410 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
1a420 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
1a430 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
1a440 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
1a450 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
1a460 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
1a470 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
1a480 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
1a490 20 62 79 20 74 68 65 20 0a 20 2a 20 76 61 6c 75   by the . * valu
1a4a0 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c  e of "op" as fol
1a4b0 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20  lows:. *. * (op 
1a4c0 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a  == TK_INSERT). *
1a4d0 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74   orconf    -> st
1a4e0 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46  ores the ON CONF
1a4f0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20  LICT algorithm. 
1a500 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49  * pSelect   -> I
1a510 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
1a520 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c  ERT INTO ... SEL
1a530 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e  ECT ... statemen
1a540 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20  t, then. *      
1a550 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f          this sto
1a560 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  res a pointer to
1a570 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
1a580 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65  ement. Otherwise
1a590 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72 67 65 74   NULL.. * target
1a5a0 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68      -> A token h
1a5b0 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65  olding the quote
1a5c0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
1a5d0 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
1a5e0 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
1a5f0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
1a600 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
1a610 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
1a620 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
1a630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
1a640 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
1a650 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
1a660 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a670 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
1a680 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
1a690 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
1a6a0 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
1a6b0 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a 20 20 20  ALUES ... . *   
1a6c0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
1a6d0 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
1a6e0 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
1a6f0 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1a710 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
1a720 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
1a730 45 54 45 29 0a 20 2a 20 74 61 72 67 65 74 20 20  ETE). * target  
1a740 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20 68 6f 6c    -> A token hol
1a750 64 69 6e 67 20 74 68 65 20 71 75 6f 74 65 64 20  ding the quoted 
1a760 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
1a770 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d  e to delete from
1a780 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
1a790 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
1a7a0 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45  se of the DELETE
1a7b0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
1a7c0 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
1a7d0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1a7e0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
1a7f0 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b   * . * (op == TK
1a800 5f 55 50 44 41 54 45 29 0a 20 2a 20 74 61 72 67  _UPDATE). * targ
1a810 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
1a820 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
1a830 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
1a840 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 20  table to update 
1a850 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70 57 68 65  rows of.. * pWhe
1a860 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
1a870 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
1a880 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
1a890 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
1a8a0 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
1a8b0 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
1a8c0 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c   NULL.. * pExprL
1a8d0 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66  ist -> A list of
1a8e0 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20   the columns to 
1a8f0 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65  update and the e
1a900 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70  xpressions to up
1a910 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20  date. *         
1a920 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65       them to. Se
1a930 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  e sqlite3Update(
1a940 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  ) documentation 
1a950 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a  of "pChanges". *
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
1a970 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20 2a 2f 0a  gument.. * . */.
1a980 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
1a990 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a9b0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
1a9c0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1a9d0 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
1a9e0 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
1a9f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
1aa00 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
1aa10 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
1aa20 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
1aa30 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
1aa40 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
1aa50 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
1aa60 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
1aa70 20 53 45 4c 45 43 54 20 73 74 61 74 6d 65 6e 74   SELECT statment
1aa80 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52   or RHS of INSER
1aa90 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c 45 43 54  T INTO .. SELECT
1aaa0 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20   ... */.  Token 
1aab0 74 61 72 67 65 74 3b 20 20 20 20 20 20 20 20 2f  target;        /
1aac0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
1aad0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
1aae0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
1aaf0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1ab00 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1ab10 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
1ab20 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
1ab30 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
1ab40 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
1ab50 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
1ab60 50 44 41 54 45 2e 20 20 56 41 4c 55 45 53 20 63  PDATE.  VALUES c
1ab70 6c 61 75 73 65 20 66 6f 72 20 49 4e 53 45 52 54  lause for INSERT
1ab80 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49   */.  IdList *pI
1ab90 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f  dList;     /* Co
1aba0 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49  lumn names for I
1abb0 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67  NSERT */.  Trigg
1abc0 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
1abd0 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
1abe0 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
1abf0 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
1ac00 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
1ac10 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
1ac20 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
1ac30 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
1ac40 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
1ac50 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1ac60 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
1ac70 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
1ac80 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
1ac90 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
1aca0 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
1acb0 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
1acc0 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
1acd0 2a 2a 20 65 78 70 6c 69 63 69 74 2e 20 20 0a 2a  ** explicit.  .*
1ace0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
1acf0 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
1ad00 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
1ad10 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
1ad20 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
1ad30 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
1ad40 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
1ad50 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
1ad60 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
1ad70 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
1ad80 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
1ad90 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
1ada0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
1adb0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
1adc0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
1add0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
1ade0 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
1adf0 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
1ae00 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
1ae10 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
1ae20 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
1ae30 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
1ae40 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
1ae50 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1ae60 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1ae70 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
1ae80 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
1ae90 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
1aea0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
1aeb0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
1aec0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
1aed0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
1aee0 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
1aef0 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
1af00 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
1af10 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
1af20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
1af30 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
1af40 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
1af50 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
1af60 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
1af70 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
1af80 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
1af90 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
1afa0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
1afb0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
1afc0 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
1afd0 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
1afe0 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
1aff0 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
1b000 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
1b010 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
1b020 2f 0a 20 20 69 6e 74 20 20 6e 43 68 61 72 3b 20  /.  int  nChar; 
1b030 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
1b040 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
1b050 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1b060 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
1b070 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
1b080 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
1b090 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 69 6e 74  n zText */.  int
1b0a0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
1b0b0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
1b0c0 6f 77 65 64 20 73 74 72 69 6e 67 20 6c 65 6e 67  owed string leng
1b0d0 74 68 20 2a 2f 0a 20 20 75 38 20 20 20 75 73 65  th */.  u8   use
1b0e0 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20  Malloc;      /* 
1b0f0 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a 20 73 71 6c  0: none,  1: sql
1b100 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20 20 32  ite3DbMalloc,  2
1b110 3a 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  : sqlite3_malloc
1b120 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72   */.  u8   accEr
1b130 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54  ror;       /* ST
1b140 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20  RACCUM_NOMEM or 
1b150 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20  STRACCUM_TOOBIG 
1b160 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54  */.};.#define ST
1b170 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31  RACCUM_NOMEM   1
1b180 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
1b190 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 0a 2f 2a 0a  M_TOOBIG  2../*.
1b1a0 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
1b1b0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1b1c0 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
1b1d0 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
1b1e0 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
1b1f0 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
1b200 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
1b210 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
1b220 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
1b230 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
1b240 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1b250 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
1b260 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
1b270 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
1b280 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
1b290 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
1b2a0 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
1b2b0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1b2c0 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
1b2d0 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
1b2e0 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
1b2f0 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
1b300 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
1b310 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
1b320 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
1b330 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
1b340 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
1b350 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
1b360 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
1b370 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
1b380 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
1b390 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
1b3a0 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
1b3b0 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
1b3c0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
1b3d0 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
1b3e0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1b410 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
1b420 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
1b430 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1b440 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1b450 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
1b460 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1b470 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
1b4a0 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
1b4b0 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
1b4c0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
1b4d0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
1b4e0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
1b4f0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
1b500 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
1b530 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
1b540 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
1b550 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20   int mxStrlen;  
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74     /* Maximum st
1b580 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1b590 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
1b5a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b5b0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
1b5c0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
1b5d0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
1b5e0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
1b5f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
1b600 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
1b610 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
1b620 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
1b630 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
1b640 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1b650 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
1b660 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
1b670 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
1b680 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
1b690 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
1b6a0 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
1b6b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
1b6c0 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
1b6d0 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
1b6e0 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
1b6f0 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
1b700 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b720 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
1b730 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
1b740 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b760 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
1b770 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
1b780 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
1b790 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
1b7a0 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
1b7b0 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
1b7c0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
1b7d0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
1b7e0 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
1b7f0 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
1b800 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
1b810 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
1b820 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1b830 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
1b840 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53  ap */.  void *pS
1b850 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20  cratch;         
1b860 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72            /* Scr
1b870 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  atch memory */. 
1b880 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20   int szScratch; 
1b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8a0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
1b8b0 63 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65  ch scratch buffe
1b8c0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61  r */.  int nScra
1b8d0 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
1b8e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b8f0 65 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75  er of scratch bu
1b900 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
1b910 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b930 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
1b940 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
1b950 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1b960 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
1b970 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
1b980 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
1b990 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
1b9c0 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
1b9d0 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
1b9e0 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
1b9f0 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
1ba00 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
1ba10 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
1ba20 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
1ba30 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
1ba40 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
1ba50 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
1ba60 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20 54 68  abled */.  /* Th
1ba70 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
1ba80 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
1ba90 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
1baa0 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
1bab0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
1bac0 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
1bad0 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
1bae0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
1bb10 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
1bb20 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
1bb30 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
1bb60 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
1bb70 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
1bb80 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
1bbb0 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
1bbc0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
1bbd0 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
1bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bbf0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
1bc00 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
1bc10 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
1bc20 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
1bc30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1bc40 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
1bc50 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
1bc60 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1bc70 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
1bc80 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
1bc90 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
1bca0 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 69  tialize() */.  i
1bcb0 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
1bcc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1bcd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
1bce0 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
1bcf0 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  x */.  void (*xL
1bd00 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
1bd10 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
1bd20 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
1bd30 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
1bd40 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bd60 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
1bd70 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20 20 69  to xLog() */.  i
1bd80 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
1bd90 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
1bda0 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
1bdb0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
1bdc0 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ls */.#ifdef SQL
1bdd0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
1bde0 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
1bdf0 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
1be00 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
1be10 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
1be20 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
1be30 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  };../*.** Contex
1be40 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
1be50 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
1be60 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
1be70 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
1be80 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
1be90 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
1bea0 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
1beb0 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
1bec0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
1bed0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
1bee0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
1bef0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
1bf00 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1bf10 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1bf20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1bf40 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1bf50 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1bf60 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1bf90 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
1bfa0 20 62 53 65 6c 65 63 74 44 65 70 74 68 46 69 72   bSelectDepthFir
1bfb0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1bfc0 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 73 75          /* Do su
1bfd0 62 71 75 65 72 69 65 73 20 66 69 72 73 74 20 2a  bqueries first *
1bfe0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20  /.  union {     
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c010 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20   Extra data for 
1c020 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20  callback */.    
1c030 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43  NameContext *pNC
1c040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1c060 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
1c070 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c0a0 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
1c0b0 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
1c0c0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
1c0f0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
1c100 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
1c110 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
1c120 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63     /* Counting c
1c130 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73  olumn references
1c140 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
1c150 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
1c160 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
1c170 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
1c180 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
1c190 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
1c1a0 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
1c1b0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1c1c0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1c1d0 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
1c1e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1c1f0 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
1c200 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
1c210 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
1c220 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
1c230 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 0a  er*, Select*);..
1c240 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
1c250 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
1c260 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
1c270 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
1c280 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
1c290 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
1c2a0 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
1c2b0 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
1c2c0 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
1c2d0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
1c2e0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
1c2f0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
1c300 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
1c310 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
1c320 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
1c330 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
1c340 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
1c350 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
1c360 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1c370 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1c380 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1c390 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1c3a0 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1c3b0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1c3c0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1c3d0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1c3e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1c3f0 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1c400 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1c410 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1c420 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1c430 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1c460 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1c470 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1c480 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1c490 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1c4d0 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1c4e0 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1c4f0 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1c500 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1c510 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1c520 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1c530 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1c540 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1c550 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1c560 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1c570 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1c580 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1c590 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1c5a0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1c5b0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1c5c0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1c5d0 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1c5e0 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1c5f0 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1c600 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1c610 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1c620 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1c630 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1c640 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1c650 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1c660 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1c670 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1c680 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1c690 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1c6a0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1c6b0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1c6c0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1c6d0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1c6e0 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1c6f0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1c700 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1c710 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1c720 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1c730 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1c740 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1c750 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1c760 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1c770 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1c780 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1c790 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1c7a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1c7b0 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1c7c0 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1c7d0 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1c7e0 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1c7f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c800 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1c810 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1c820 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1c830 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1c840 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1c850 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1c860 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1c870 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1c880 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1c890 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1c8a0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1c8b0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1c8c0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1c8d0 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1c8e0 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1c8f0 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1c900 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c910 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1c920 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1c930 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1c940 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1c950 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1c960 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1c970 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1c980 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1c990 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1c9a0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1c9b0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1c9c0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1c9d0 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1c9e0 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1c9f0 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1ca00 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1ca10 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1ca20 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1ca30 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1ca40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ca50 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1ca60 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1ca70 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1ca80 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1ca90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1caa0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1cab0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1cac0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1cad0 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1cae0 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1caf0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1cb00 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1cb10 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1cb20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1cb30 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1cb40 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1cb50 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1cb60 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1cb70 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1cb80 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1cb90 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1cba0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1cbb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1cbc0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1cbd0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1cbe0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1cbf0 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1cc00 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1cc10 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1cc20 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1cc30 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1cc40 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1cc50 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1cc60 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1cc70 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1cc80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1cc90 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1cca0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1ccb0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1ccc0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1ccd0 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1cce0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1ccf0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1cd00 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1cd10 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1cd20 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1cd30 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1cd40 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1cd50 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1cd60 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cd70 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1cd80 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1cd90 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1cda0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1cdb0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1cdc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1cdd0 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1cde0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1cdf0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1ce00 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1ce10 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1ce20 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1ce30 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1ce40 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1ce50 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1ce60 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1ce70 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1ce80 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1ce90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1cea0 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1ceb0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1cec0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1ced0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1cee0 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1cef0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1cf00 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1cf10 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1cf20 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1cf30 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1cf40 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1cf50 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1cf60 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1cf70 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1cf80 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1cf90 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1cfa0 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1cfb0 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1cfc0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1cfd0 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1cfe0 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1cff0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1d000 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1d010 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1d020 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1d030 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1d040 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1d050 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1d060 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1d070 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1d080 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1d090 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1d0a0 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1d0b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1d0c0 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1d0d0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1d0e0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1d0f0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1d100 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1d110 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1d120 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1d130 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1d140 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1d150 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1d160 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1d170 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1d180 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1d190 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1d1a0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1d1b0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1d1c0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1d1d0 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1d1e0 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1d1f0 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1d200 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1d210 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1d220 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1d230 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1d240 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1d250 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1d260 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1d270 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1d280 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1d290 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1d2a0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1d2b0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1d2c0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1d2d0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1d2e0 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1d2f0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1d300 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1d310 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1d320 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1d330 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1d340 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1d350 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1d360 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1d370 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1d380 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1d390 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1d3a0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1d3b0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1d3c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1d3d0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1d3e0 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1d3f0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1d400 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1d410 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1d420 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1d430 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1d440 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1d450 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1d460 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1d470 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1d480 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1d490 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1d4a0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1d4b0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1d4c0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1d4d0 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1d4e0 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1d4f0 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1d500 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1d510 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1d520 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1d530 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1d540 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1d550 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1d560 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1d570 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1d580 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1d590 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1d5a0 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1d5b0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1d5c0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1d5d0 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1d5e0 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1d5f0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1d600 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1d610 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1d620 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1d630 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1d640 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1d650 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1d660 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1d670 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1d680 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1d690 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d6a0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1d6b0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
1d6c0 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  3VXPrintf(StrAcc
1d6d0 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  um*, int, const 
1d6e0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
1d6f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1d700 4f 4d 49 54 5f 54 52 41 43 45 0a 76 6f 69 64 20  OMIT_TRACE.void 
1d710 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
1d720 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
1d730 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e  char*, ...);.#en
1d740 64 69 66 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  dif.char *sqlite
1d750 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
1d760 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
1d770 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
1d780 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
1d790 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1d7a0 20 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20   va_list);.char 
1d7b0 2a 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66  *sqlite3MAppendf
1d7c0 28 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c  (sqlite3*,char*,
1d7d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
1d7e0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
1d7f0 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65  LITE_TEST) || de
1d800 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
1d810 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
1d820 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
1d830 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1d840 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
1d850 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
1d860 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
1d870 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
1d880 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
1d890 69 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f  if../* Output fo
1d8a0 72 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c  rmatting for SQL
1d8b0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50  ITE_TESTCTRL_EXP
1d8c0 4c 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69  LAIN */.#if defi
1d8d0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1d8e0 45 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a  E_TREE_EXPLAIN).
1d8f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d900 70 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a  plainBegin(Vdbe*
1d910 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
1d920 33 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56  3ExplainPrintf(V
1d930 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
1d940 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20  *, ...);.  void 
1d950 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c  sqlite3ExplainNL
1d960 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20  (Vdbe*);.  void 
1d970 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75  sqlite3ExplainPu
1d980 73 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  sh(Vdbe*);.  voi
1d990 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1d9a0 50 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f  Pop(Vdbe*);.  vo
1d9b0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1d9c0 6e 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a  nFinish(Vdbe*);.
1d9d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d9e0 70 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65  plainSelect(Vdbe
1d9f0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76  *, Select*);.  v
1da00 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1da10 69 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78  inExpr(Vdbe*, Ex
1da20 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
1da30 69 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c  ite3ExplainExprL
1da40 69 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c  ist(Vdbe*, ExprL
1da50 69 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63  ist*);.  const c
1da60 68 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65  har *sqlite3Vdbe
1da70 45 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65  Explanation(Vdbe
1da80 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
1da90 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1daa0 6e 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69  nBegin(X).# defi
1dab0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  ne sqlite3Explai
1dac0 6e 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64  nSelect(A,B).# d
1dad0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1dae0 6c 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20  lainExpr(A,B).# 
1daf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1db00 70 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c  plainExprList(A,
1db10 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  B).# define sqli
1db20 74 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68  te3ExplainFinish
1db30 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1db40 69 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74  ite3VdbeExplanat
1db50 69 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a  ion(X) 0.#endif.
1db60 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
1db70 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
1db80 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
1db90 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
1dba0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d  id sqlite3ErrorM
1dbb0 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  sg(Parse*, const
1dbc0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e   char*, ...);.in
1dbd0 74 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  t sqlite3Dequote
1dbe0 28 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (char*);.int sql
1dbf0 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28  ite3KeywordCode(
1dc00 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
1dc10 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
1dc20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72  sqlite3RunParser
1dc30 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
1dc40 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  har*, char **);.
1dc50 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1dc60 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29  shCoding(Parse*)
1dc70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
1dc80 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b  TempReg(Parse*);
1dc90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
1dca0 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73  easeTempReg(Pars
1dcb0 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  e*,int);.int sql
1dcc0 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65  ite3GetTempRange
1dcd0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
1dce0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
1dcf0 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  eTempRange(Parse
1dd00 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
1dd10 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d   sqlite3ClearTem
1dd20 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a  pRegCache(Parse*
1dd30 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1dd40 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
1dd50 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
1dd60 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
1dd70 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
1dd80 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
1dd90 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
1dda0 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
1ddb0 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
1ddc0 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
1ddd0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
1dde0 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
1ddf0 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  t, Expr*, Expr*,
1de00 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a   const Token*);.
1de10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
1de20 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
1de30 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
1de40 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
1de50 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
1de60 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
1de70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1de80 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
1de90 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  r(Parse*, Expr*)
1dea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1deb0 70 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  prDelete(sqlite3
1dec0 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  *, Expr*);.ExprL
1ded0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
1dee0 4c 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65  ListAppend(Parse
1def0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1df00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1df10 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
1df20 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1df30 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
1df40 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
1df50 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
1df60 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
1df70 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1df80 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
1df90 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
1dfa0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1dfb0 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
1dfc0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
1dfd0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
1dfe0 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
1dff0 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
1e000 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
1e010 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
1e020 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
1e030 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1e040 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
1e050 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
1e060 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
1e070 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
1e080 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
1e090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e0a0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
1e0b0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
1e0c0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1e0d0 50 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74  Parse(Parse*,int
1e0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1e0f0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
1e100 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
1e110 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
1e120 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
1e130 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
1e140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
1e150 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
1e160 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
1e170 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
1e180 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
1e190 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
1e1a0 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
1e1b0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
1e1c0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
1e1d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
1e1e0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
1e1f0 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
1e200 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
1e210 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  rse*,Token*);.vo
1e220 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
1e230 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
1e240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1e250 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
1e260 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1e270 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1e280 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
1e290 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
1e2a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
1e2b0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
1e2c0 6c 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c  lumnType(Parse*,
1e2d0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
1e2e0 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56  lite3AddDefaultV
1e2f0 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72  alue(Parse*,Expr
1e300 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
1e310 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79  ite3AddCollateTy
1e320 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
1e330 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e340 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  EndTable(Parse*,
1e350 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38  Token*,Token*,u8
1e360 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73  ,Select*);.int s
1e370 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63  qlite3ParseUri(c
1e380 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
1e390 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20   char*,unsigned 
1e3a0 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  int*,.          
1e3b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1e3c0 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63  3_vfs**,char**,c
1e3d0 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a  har **);.Btree *
1e3e0 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42  sqlite3DbNameToB
1e3f0 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tree(sqlite3*,co
1e400 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
1e410 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28  sqlite3CodeOnce(
1e420 50 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65  Parse *);..Bitve
1e430 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
1e440 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
1e450 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
1e460 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
1e470 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
1e480 76 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20  vecSet(Bitvec*, 
1e490 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
1e4a0 65 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69  e3BitvecClear(Bi
1e4b0 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64  tvec*, u32, void
1e4c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1e4d0 42 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69  BitvecDestroy(Bi
1e4e0 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69  tvec*);.u32 sqli
1e4f0 74 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69  te3BitvecSize(Bi
1e500 74 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  tvec*);.int sqli
1e510 74 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e  te3BitvecBuiltin
1e520 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a  Test(int,int*);.
1e530 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
1e540 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
1e550 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
1e560 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
1e570 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
1e580 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
1e590 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
1e5a0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
1e5b0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1e5c0 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
1e5d0 74 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69  t*, u8 iBatch, i
1e5e0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
1e5f0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
1e600 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
1e610 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
1e620 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
1e630 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
1e640 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
1e650 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
1e660 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
1e670 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
1e680 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1e690 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
1e6a0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
1e6b0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
1e6c0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
1e6d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
1e6e0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
1e6f0 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76  A,B) 0.#endif..v
1e700 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
1e710 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
1e720 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
1e730 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1e740 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
1e750 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e760 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1e770 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
1e780 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
1e790 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
1e7a0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
1e7b0 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
1e7c0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
1e7d0 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
1e7e0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
1e7f0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
1e800 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
1e810 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
1e820 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
1e830 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
1e840 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
1e850 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
1e860 28 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  (X).#endif.int s
1e870 71 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74  qlite3CodeCorout
1e880 69 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ine(Parse*, Sele
1e890 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1e8a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
1e8b0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
1e8c0 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
1e8d0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69  *, Select*, IdLi
1e8e0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
1e8f0 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c  *sqlite3ArrayAll
1e900 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76  ocate(sqlite3*,v
1e910 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  oid*,int,int*,in
1e920 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  t*);.IdList *sql
1e930 69 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64  ite3IdListAppend
1e940 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
1e950 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
1e960 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e   sqlite3IdListIn
1e970 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73  dex(IdList*,cons
1e980 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73  t char*);.SrcLis
1e990 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
1e9a0 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33  tEnlarge(sqlite3
1e9b0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
1e9c0 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  , int);.SrcList 
1e9d0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
1e9e0 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
1e9f0 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
1ea00 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69  , Token*);.SrcLi
1ea10 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
1ea20 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d  stAppendFromTerm
1ea30 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1ea40 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
1ea50 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c           Token*,
1ea80 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c   Select*, Expr*,
1ea90 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
1eaa0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e  sqlite3SrcListIn
1eab0 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c  dexedBy(Parse *,
1eac0 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65   SrcList *, Toke
1ead0 6e 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  n *);.int sqlite
1eae0 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70  3IndexedByLookup
1eaf0 28 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74  (Parse *, struct
1eb00 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
1eb10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1eb20 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1eb30 70 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  pe(SrcList*);.vo
1eb40 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
1eb50 74 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50  tAssignCursors(P
1eb60 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1eb70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64  ;.void sqlite3Id
1eb80 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74  ListDelete(sqlit
1eb90 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  e3*, IdList*);.v
1eba0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1ebb0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
1ebc0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e  *, SrcList*);.In
1ebd0 64 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f  dex *sqlite3Allo
1ebe0 63 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  cateIndexObject(
1ebf0 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74  sqlite3*,i16,int
1ec00 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e 64 65 78 20  ,char**);.Index 
1ec10 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 49 6e  *sqlite3CreateIn
1ec20 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  dex(Parse*,Token
1ec30 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74  *,Token*,SrcList
1ec40 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
1ec50 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e    Expr*, int, in
1ec80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1ec90 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
1eca0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
1ecb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
1ecc0 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
1ecd0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
1ece0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
1ecf0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
1ed00 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
1ed10 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1ed20 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
1ed50 75 31 36 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u16,Expr*,Expr*)
1ed60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
1ed70 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
1ed80 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
1ed90 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
1eda0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
1edb0 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
1edc0 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
1edd0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
1ede0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1edf0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
1ee00 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
1ee10 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
1ee20 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
1ee30 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1ee40 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
1ee50 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
1ee60 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1ee70 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
1ee80 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
1ee90 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
1eea0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
1eeb0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
1eec0 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
1eed0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
1eee0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
1eef0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
1ef00 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
1ef10 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
1ef20 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
1ef30 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
1ef40 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
1ef50 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
1ef60 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
1ef70 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
1ef80 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
1ef90 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
1efa0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 75 36  (WhereInfo*);.u6
1efb0 34 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  4 sqlite3WhereOu
1efc0 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
1efd0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
1efe0 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1eff0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
1f000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
1f010 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
1f020 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
1f030 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
1f040 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
1f050 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
1f060 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
1f070 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
1f080 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
1f090 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
1f0a0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f0b0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
1f0c0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
1f0d0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f0e0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
1f0f0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
1f100 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
1f110 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
1f120 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
1f130 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
1f140 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
1f150 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1f160 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f170 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
1f180 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
1f190 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1f1a0 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
1f1b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1f1c0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
1f1d0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1f1e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
1f1f0 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20  eRemove(Parse*, 
1f200 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1f210 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
1f220 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76  Clear(Parse*);.v
1f230 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f240 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e  acheAffinityChan
1f250 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ge(Parse*, int, 
1f260 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1f270 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
1f280 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
1f290 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
1f2a0 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
1f2b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 75 38  , Expr*, int, u8
1f2c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f2d0 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
1f2e0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
1f2f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f300 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
1f310 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
1f320 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
1f330 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72 73  odeAndCache(Pars
1f340 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
1f350 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
1f360 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61 72  CodeExprList(Par
1f370 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
1f380 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
1f390 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
1f3a0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
1f3b0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
1f3c0 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
1f3d0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
1f3e0 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
1f3f0 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
1f400 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 76  stant terms */.v
1f410 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
1f420 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
1f430 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
1f440 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1f450 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
1f460 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
1f470 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1f480 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
1f490 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1f4a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61  const char*);.Ta
1f4b0 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
1f4c0 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 69  teTable(Parse*,i
1f4d0 6e 74 20 69 73 56 69 65 77 2c 63 6f 6e 73 74 20  nt isView,const 
1f4e0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1f4f0 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
1f500 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
1f510 65 6d 28 50 61 72 73 65 2a 2c 69 6e 74 20 69 73  em(Parse*,int is
1f520 56 69 65 77 2c 73 74 72 75 63 74 20 53 72 63 4c  View,struct SrcL
1f530 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64  ist_item *);.Ind
1f540 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49  ex *sqlite3FindI
1f550 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ndex(sqlite3*,co
1f560 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1f570 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1f580 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1f590 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65  leteTable(sqlite
1f5a0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1f5b0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1f5c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
1f5d0 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69  Index(sqlite3*,i
1f5e0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
1f5f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63  .void sqlite3Vac
1f600 75 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  uum(Parse*);.int
1f610 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
1f620 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
1f630 33 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  3*);.char *sqlit
1f640 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1f650 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
1f660 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
1f670 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
1f680 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
1f690 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
1f6a0 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
1f6b0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
1f6c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
1f6d0 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
1f6e0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
1f6f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f700 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
1f710 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
1f720 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
1f730 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
1f740 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
1f750 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
1f760 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
1f770 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
1f780 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
1f790 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
1f7a0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
1f7b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
1f7c0 72 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69  rngSaveState(voi
1f7d0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
1f7e0 50 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65  PrngRestoreState
1f7f0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1f800 69 74 65 33 50 72 6e 67 52 65 73 65 74 53 74 61  ite3PrngResetSta
1f810 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
1f820 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1f830 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
1f840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1f850 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
1f860 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
1f870 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
1f880 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
1f890 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
1f8a0 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
1f8b0 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
1f8c0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
1f8d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f8e0 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
1f8f0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
1f900 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
1f910 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
1f920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1f930 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
1f940 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
1f950 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
1f960 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
1f970 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
1f980 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
1f990 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
1f9a0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
1f9b0 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
1f9c0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
1f9d0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
1f9e0 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
1f9f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1fa00 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
1fa10 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  ction(Expr*);.in
1fa20 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
1fa30 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
1fa40 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
1fa50 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
1fa60 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  nst Expr*);.void
1fa70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1fa80 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62 65 2a  IsNullJump(Vdbe*
1fa90 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 69  , const Expr*, i
1faa0 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
1fab0 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f  lite3ExprNeedsNo
1fac0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63  AffinityChange(c
1fad0 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72  onst Expr*, char
1fae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
1faf0 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72  Rowid(const char
1fb00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1fb10 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74  GenerateRowDelet
1fb20 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  e(Parse*,Table*,
1fb30 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
1fb40 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
1fb50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
1fb60 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
1fb70 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
1fb80 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
1fb90 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69   int*);.int sqli
1fba0 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
1fbb0 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
1fbc0 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
1fbd0 74 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  t, int*);.void s
1fbe0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
1fbf0 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
1fc00 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
1fc10 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
1fc20 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
1fc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc40 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
1fc50 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  t,int*);.void sq
1fc60 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
1fc70 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
1fc80 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
1fc90 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
1fca0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
1fcb0 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
1fcc0 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
1fcd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a  *, int, int, u8*
1fce0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76  , int*, int*);.v
1fcf0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
1fd00 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50  WriteOperation(P
1fd10 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
1fd20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ;.void sqlite3Mu
1fd30 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29  ltiWrite(Parse*)
1fd40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1fd50 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a  yAbort(Parse*);.
1fd60 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74  void sqlite3Halt
1fd70 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
1fd80 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61  *, int, int, cha
1fd90 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69  r*, i8, u8);.voi
1fda0 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43  d sqlite3UniqueC
1fdb0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
1fdc0 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a  , int, Index*);.
1fdd0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69  void sqlite3Rowi
1fde0 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  dConstraint(Pars
1fdf0 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29  e*, int, Table*)
1fe00 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1fe10 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  xprDup(sqlite3*,
1fe20 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  Expr*,int);.Expr
1fe30 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
1fe40 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  rListDup(sqlite3
1fe50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  *,ExprList*,int)
1fe60 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
1fe70 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c  e3SrcListDup(sql
1fe80 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69  ite3*,SrcList*,i
1fe90 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c  nt);.IdList *sql
1fea0 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71  ite3IdListDup(sq
1feb0 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b  lite3*,IdList*);
1fec0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
1fed0 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65  SelectDup(sqlite
1fee0 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b  3*,Select*,int);
1fef0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 75 6e  .void sqlite3Fun
1ff00 63 44 65 66 49 6e 73 65 72 74 28 46 75 6e 63 44  cDefInsert(FuncD
1ff10 65 66 48 61 73 68 2a 2c 20 46 75 6e 63 44 65 66  efHash*, FuncDef
1ff20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
1ff30 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e  ite3FindFunction
1ff40 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
1ff50 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38  char*,int,int,u8
1ff60 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
1ff70 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
1ff80 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
1ff90 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
1ffa0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
1ffb0 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
1ffc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
1ffd0 65 67 69 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e  egisterGlobalFun
1ffe0 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
1fff0 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
20000 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
20010 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
20020 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
20030 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
20040 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
20050 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
20060 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
20070 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
20080 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
20090 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
200a0 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
200b0 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
200c0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
200d0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
200e0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
200f0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
20100 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
20110 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
20120 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
20130 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
20140 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
20150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20160 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
20170 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
20180 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
20190 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
201a0 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
201b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
201c0 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
201d0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
201e0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
201f0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
20200 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
20210 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
20220 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
20230 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
20240 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
20250 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
20260 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
20270 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
20280 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
20290 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
202a0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
202b0 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
202c0 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
202d0 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
202e0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
202f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
20300 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
20310 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
20320 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
20330 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
20340 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
20350 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
20360 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
20370 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
20380 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
20390 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
203a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
203b0 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
203c0 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
203d0 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
203e0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
203f0 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
20400 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
20410 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
20420 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
20430 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
20440 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
20450 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
20460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
20480 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
20490 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
204a0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
204b0 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71 6c  erUpdateStep(sql
204c0 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  ite3*,Token*,Exp
204d0 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75  rList*, Expr*, u
204e0 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  8);.  TriggerSte
204f0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
20500 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69  rDeleteStep(sqli
20510 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70  te3*,Token*, Exp
20520 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
20530 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
20540 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
20550 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  er*);.  void sql
20560 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
20570 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
20580 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
20590 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  ar*);.  u32 sqli
205a0 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
205b0 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72  k(Parse*,Trigger
205c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c  *,ExprList*,int,
205d0 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b  int,Table*,int);
205e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
205f0 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
20600 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
20610 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76  l ? (p)->pToplev
20620 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c 73 65 0a  el : (p)).#else.
20630 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
20640 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
20650 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
20660 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
20670 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
20680 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
20690 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
206a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
206b0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
206c0 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
206d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
206e0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
206f0 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
20700 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
20710 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
20720 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
20730 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
20740 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
20750 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
20760 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
20770 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
20780 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
20790 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
207a0 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
207b0 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
207c0 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
207d0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
207e0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
207f0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
20800 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
20810 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
20820 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
20830 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
20840 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
20850 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
20860 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
20870 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
20880 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
20890 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
208a0 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
208b0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
208c0 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
208d0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
208e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
208f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
20900 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
20910 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
20920 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
20930 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
20940 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
20950 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
20960 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
20970 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
20980 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
20990 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
209a0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
209b0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
209c0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
209d0 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
209e0 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
209f0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
20a00 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
20a10 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
20a20 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
20a30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
20a40 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
20a50 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
20a60 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
20a70 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
20a80 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
20a90 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
20aa0 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
20ab0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
20ac0 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
20ad0 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
20ae0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
20af0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
20b00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
20b10 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
20b20 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
20b30 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
20b40 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
20b50 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
20b60 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
20b70 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
20b80 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
20b90 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
20ba0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
20bb0 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
20bc0 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
20bd0 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
20be0 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
20bf0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
20c00 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
20c10 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
20c20 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
20c30 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
20c40 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
20c50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
20c60 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
20c70 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
20c80 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
20c90 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
20ca0 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
20cb0 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
20cc0 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
20cd0 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
20ce0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
20cf0 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
20d00 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
20d10 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
20d20 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
20d30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20d40 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
20d50 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
20d60 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
20d70 6e 64 69 66 0a 75 36 34 20 73 71 6c 69 74 65 33  ndif.u64 sqlite3
20d80 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45  LogEstToInt(LogE
20d90 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  st);../*.** Rout
20da0 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
20db0 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
20dc0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
20dd0 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
20de0 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
20df0 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
20e00 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
20e10 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
20e20 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
20e30 20 20 43 6f 64 65 20 73 68 6f 75 6c 64 20 75 73    Code should us
20e40 65 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d  e the MACRO form
20e50 73 20 62 65 6c 6f 77 2c 20 61 73 20 74 68 65 20  s below, as the 
20e60 56 61 72 69 6e 74 33 32 20 76 65 72 73 69 6f 6e  Varint32 version
20e70 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65 64 20 74  s.** are coded t
20e80 6f 20 61 73 73 75 6d 65 20 74 68 65 20 73 69 6e  o assume the sin
20e90 67 6c 65 20 62 79 74 65 20 63 61 73 65 20 69 73  gle byte case is
20ea0 20 61 6c 72 65 61 64 79 20 68 61 6e 64 6c 65 64   already handled
20eb0 20 28 77 68 69 63 68 20 0a 2a 2a 20 74 68 65 20   (which .** the 
20ec0 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f 65 73 29  MACRO form does)
20ed0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
20ee0 50 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e  PutVarint(unsign
20ef0 65 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  ed char*, u64);.
20f00 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
20f10 72 69 6e 74 33 32 28 75 6e 73 69 67 6e 65 64 20  rint32(unsigned 
20f20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a 75 38 20  char*, u32);.u8 
20f30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
20f40 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
20f50 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a  char *, u64 *);.
20f60 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
20f70 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69  int32(const unsi
20f80 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32  gned char *, u32
20f90 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
20fa0 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29  VarintLen(u64 v)
20fb0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 68 65 61  ;../*.** The hea
20fc0 64 65 72 20 6f 66 20 61 20 72 65 63 6f 72 64 20  der of a record 
20fd0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 65  consists of a se
20fe0 71 75 65 6e 63 65 20 76 61 72 69 61 62 6c 65 2d  quence variable-
20ff0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
21000 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74 65 67 65  .** These intege
21010 72 73 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c  rs are almost al
21020 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e 64 20 61  ways small and a
21030 72 65 20 65 6e 63 6f 64 65 64 20 61 73 20 61 20  re encoded as a 
21040 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a 2a 2a 20  single byte..** 
21050 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
21060 63 72 6f 73 20 74 61 6b 65 20 61 64 76 61 6e 74  cros take advant
21070 61 67 65 20 74 68 69 73 20 66 61 63 74 20 74 6f  age this fact to
21080 20 70 72 6f 76 69 64 65 20 61 20 66 61 73 74 20   provide a fast 
21090 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64 20 64 65  encode.** and de
210a0 63 6f 64 65 20 6f 66 20 74 68 65 20 69 6e 74 65  code of the inte
210b0 67 65 72 73 20 69 6e 20 61 20 72 65 63 6f 72 64  gers in a record
210c0 20 68 65 61 64 65 72 2e 20 20 49 74 20 69 73 20   header.  It is 
210d0 66 61 73 74 65 72 20 66 6f 72 20 74 68 65 20 63  faster for the c
210e0 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65 20 77 68  ommon.** case wh
210f0 65 72 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ere the integer 
21100 69 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65  is a single byte
21110 2e 20 20 49 74 20 69 73 20 61 20 6c 69 74 74 6c  .  It is a littl
21120 65 20 73 6c 6f 77 65 72 20 77 68 65 6e 20 74 68  e slower when th
21130 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 73 20  e.** integer is 
21140 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62 79 74 65  two or more byte
21150 73 2e 20 20 42 75 74 20 6f 76 65 72 61 6c 6c 20  s.  But overall 
21160 69 74 20 69 73 20 66 61 73 74 65 72 2e 0a 2a 2a  it is faster..**
21170 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
21180 67 20 65 78 70 72 65 73 73 69 6f 6e 73 20 61 72  g expressions ar
21190 65 20 65 71 75 69 76 61 6c 65 6e 74 3a 0a 2a 2a  e equivalent:.**
211a0 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69  .**     x = sqli
211b0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 20  te3GetVarint32( 
211c0 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20 20 20 20  A, &B );.**     
211d0 78 20 3d 20 73 71 6c 69 74 65 33 50 75 74 56 61  x = sqlite3PutVa
211e0 72 69 6e 74 33 32 28 20 41 2c 20 42 20 29 3b 0a  rint32( A, B );.
211f0 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 67 65  **.**     x = ge
21200 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
21210 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d 20 70 75  );.**     x = pu
21220 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
21230 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  );.**.*/.#define
21240 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
21250 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
21260 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
21270 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
21280 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
21290 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
212a0 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
212b0 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
212c0 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
212d0 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
212e0 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
212f0 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
21300 65 33 50 75 74 56 61 72 69 6e 74 33 32 28 28 41  e3PutVarint32((A
21310 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
21320 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
21330 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
21340 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
21350 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
21360 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
21370 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
21380 66 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a  finityStr(Vdbe *
21390 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76 6f 69 64  , Index *);.void
213a0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
213b0 69 6e 69 74 79 53 74 72 28 56 64 62 65 20 2a 2c  inityStr(Vdbe *,
213c0 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68 61 72 20   Table *);.char 
213d0 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
213e0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
213f0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
21400 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
21410 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
21420 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
21430 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
21440 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
21450 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
21460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
21470 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
21480 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
21490 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
214a0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ror(sqlite3*, in
214b0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
214c0 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..);.void *sqlit
214d0 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
214e0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
214f0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
21500 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
21510 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
21520 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
21530 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
21540 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
21550 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
21560 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
21570 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
21580 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
21590 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
215a0 44 45 42 55 47 5f 4f 53 5f 54 52 41 43 45 29 0a  DEBUG_OS_TRACE).
215b0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
215c0 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
215d0 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
215e0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
215f0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
21600 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
21610 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
21620 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
21630 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
21640 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
21650 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
21660 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
21670 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
21680 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
21690 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
216a0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
216b0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
216c0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
216d0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
216e0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
216f0 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
21700 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 54 6f  Parse, Expr*, To
21710 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ken*);.Expr *sql
21720 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
21730 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
21740 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
21750 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
21760 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
21770 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
21780 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
21790 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
217a0 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
217b0 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
217c0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
217d0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
217e0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
217f0 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
21800 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
21810 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
21820 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
21830 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
21840 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
21850 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
21860 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
21870 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
21880 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
21890 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
218a0 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
218b0 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
218c0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
218d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
218e0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
218f0 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
21900 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
21910 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29 3b 0a 0a   char *z,int);..
21920 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69  const void *sqli
21930 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c  te3ValueText(sql
21940 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29  ite3_value*, u8)
21950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
21960 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f  ueBytes(sqlite3_
21970 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69  value*, u8);.voi
21980 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65  d sqlite3ValueSe
21990 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c  tStr(sqlite3_val
219a0 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  ue*, int, const 
219b0 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20 20 20 20  void *,u8, .    
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
219e0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
219f0 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
21a00 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
21a10 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
21a20 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
21a30 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  e3 *);.char *sql
21a40 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
21a50 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
21a60 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  id*, int, u8);.i
21a70 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
21a80 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
21a90 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
21aa0 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
21ab0 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
21ac0 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
21ad0 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
21ae0 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
21af0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
21b00 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
21b10 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
21b20 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
21b30 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
21b40 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
21b50 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
21b60 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b  3UpperToLower[];
21b70 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
21b80 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
21b90 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65  te3CtypeMap[];.e
21ba0 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65  xtern const Toke
21bb0 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65  n sqlite3IntToke
21bc0 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c  ns[];.extern SQL
21bd0 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53  ITE_WSD struct S
21be0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c  qlite3Config sql
21bf0 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65  ite3Config;.exte
21c00 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 46 75  rn SQLITE_WSD Fu
21c10 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
21c20 33 47 6c 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73  3GlobalFunctions
21c30 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
21c40 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e  _OMIT_WSD.extern
21c50 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64   int sqlite3Pend
21c60 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a  ingByte;.#endif.
21c70 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
21c80 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
21c90 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
21ca0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
21cb0 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50  sqlite3Reindex(P
21cc0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
21cd0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
21ce0 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f  ite3AlterFunctio
21cf0 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  ns(void);.void s
21d00 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d  qlite3AlterRenam
21d10 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  eTable(Parse*, S
21d20 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  rcList*, Token*)
21d30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
21d40 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69  Token(const unsi
21d50 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74  gned char *, int
21d60 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
21d70 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72  3NestedParse(Par
21d80 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
21d90 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  , ...);.void sql
21da0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
21db0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c  edStatements(sql
21dc0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
21dd0 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74  te3CodeSubselect
21de0 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a  (Parse *, Expr *
21df0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21e00 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
21e10 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
21e20 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
21e30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
21e40 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
21e50 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
21e60 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21e70 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
21e80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
21e90 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
21ea0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
21eb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
21ec0 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
21ed0 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
21ee0 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
21ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21f00 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
21f10 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
21f20 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
21f30 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
21f40 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
21f50 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
21f60 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
21f70 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
21f80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
21f90 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
21fa0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
21fb0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
21fc0 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
21fd0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
21fe0 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
21ff0 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
22000 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
22010 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
22020 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
22030 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
22040 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
22050 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
22060 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
22070 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
22080 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
22090 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
220a0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
220b0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
220c0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
220d0 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
220e0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
220f0 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
22100 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
22110 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
22120 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
22130 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
22140 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
22150 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
22160 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
22170 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
22180 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
22190 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
221a0 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
221b0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
221c0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
221d0 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
221e0 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
221f0 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
22200 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
22210 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
22220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 69 6e  .void sqlite3Min
22230 69 6d 75 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50  imumFileFormat(P
22240 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
22250 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
22260 68 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a  hemaClear(void *
22270 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74  );.Schema *sqlit
22280 65 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69  e3SchemaGet(sqli
22290 74 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b  te3 *, Btree *);
222a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65  .int sqlite3Sche
222b0 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65  maToIndex(sqlite
222c0 33 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29  3 *db, Schema *)
222d0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
222e0 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73  e3KeyInfoAlloc(s
222f0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29  qlite3*,int,int)
22300 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65  ;.void sqlite3Ke
22310 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e  yInfoUnref(KeyIn
22320 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
22330 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66  qlite3KeyInfoRef
22340 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49  (KeyInfo*);.KeyI
22350 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
22360 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65  nfoOfIndex(Parse
22370 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64  *, Index*);.#ifd
22380 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
22390 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  int sqlite3KeyIn
223a0 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65  foIsWriteable(Ke
223b0 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a  yInfo*);.#endif.
223c0 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74  int sqlite3Creat
223d0 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c  eFunc(sqlite3 *,
223e0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
223f0 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c  nt, int, void *,
22400 20 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c   .  void (*)(sql
22410 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
22420 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
22430 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  **),.  void (*)(
22440 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
22450 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
22460 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29  ue **), void (*)
22470 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
22480 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75  *),.  FuncDestru
22490 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
224a0 72 0a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r.);.int sqlite3
224b0 41 70 69 45 78 69 74 28 73 71 6c 69 74 65 33 20  ApiExit(sqlite3 
224c0 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  *db, int);.int s
224d0 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61  qlite3OpenTempDa
224e0 74 61 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b  tabase(Parse *);
224f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ..void sqlite3St
22500 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63  rAccumInit(StrAc
22510 63 75 6d 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  cum*, char*, int
22520 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
22530 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
22540 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
22550 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
22560 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e  oid sqlite3Appen
22570 64 53 70 61 63 65 28 53 74 72 41 63 63 75 6d 2a  dSpace(StrAccum*
22580 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c  ,int);.char *sql
22590 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69  ite3StrAccumFini
225a0 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  sh(StrAccum*);.v
225b0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
225c0 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75  cumReset(StrAccu
225d0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
225e0 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28  3SelectDestInit(
225f0 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c  SelectDest*,int,
22600 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
22610 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45  te3CreateColumnE
22620 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53  xpr(sqlite3 *, S
22630 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69  rcList *, int, i
22640 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  nt);..void sqlit
22650 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28  e3BackupRestart(
22660 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a  sqlite3_backup *
22670 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
22680 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69  ackupUpdate(sqli
22690 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67  te3_backup *, Pg
226a0 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b  no, const u8 *);
226b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
226c0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
226d0 53 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74  STAT4.void sqlit
226e0 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f  e3AnalyzeFunctio
226f0 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71  ns(void);.int sq
22700 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53  lite3Stat4ProbeS
22710 65 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 49  etValue(Parse*,I
22720 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
22730 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 75 38 2c  cord**,Expr*,u8,
22740 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  int,int*);.void 
22750 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
22760 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
22770 63 6f 72 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  cord*);.#endif..
22780 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
22790 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
227a0 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
227b0 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  r.*/.void *sqlit
227c0 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f  e3ParserAlloc(vo
227d0 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74 29 29 3b  id*(*)(size_t));
227e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72  .void sqlite3Par
227f0 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76  serFree(void*, v
22800 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
22810 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
22820 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54  er(void*, int, T
22830 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23  oken, Parse*);.#
22840 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58  ifdef YYTRACKMAX
22850 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74  STACKDEPTH.  int
22860 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74   sqlite3ParserSt
22870 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a  ackPeak(void*);.
22880 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c  #endif..void sql
22890 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65  ite3AutoLoadExte
228a0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
228b0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
228c0 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e  _OMIT_LOAD_EXTEN
228d0 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  SION.  void sqli
228e0 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
228f0 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  ns(sqlite3*);.#e
22900 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
22910 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69  ite3CloseExtensi
22920 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23  ons(X).#endif..#
22930 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22940 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
22950 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61    void sqlite3Ta
22960 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c  bleLock(Parse *,
22970 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63   int, int, u8, c
22980 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65  onst char *);.#e
22990 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
229a0 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76  lite3TableLock(v
229b0 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66  ,w,x,y,z).#endif
229c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
229d0 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74  TEST.  int sqlit
229e0 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e  e3Utf8To8(unsign
229f0 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  ed char*);.#endi
22a00 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
22a10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
22a20 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  LE.#  define sql
22a30 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29  ite3VtabClear(Y)
22a40 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
22a50 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20  e3VtabSync(X,Y) 
22a60 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
22a70 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52  ine sqlite3VtabR
22a80 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65  ollback(X).#  de
22a90 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
22aa0 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66  Commit(X).#  def
22ab0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
22ac0 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64  nSync(db) 0.#  d
22ad0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22ae0 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20 64 65 66  bLock(X) .#  def
22af0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
22b00 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69  nlock(X).#  defi
22b10 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  ne sqlite3VtabUn
22b20 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64  lockList(X).#  d
22b30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22b40 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c  bSavepoint(X, Y,
22b50 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20   Z) SQLITE_OK.# 
22b60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47   define sqlite3G
22b70 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28  etVTable(X,Y)  (
22b80 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73  (VTable*)0).#els
22b90 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  e.   void sqlite
22ba0 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74  3VtabClear(sqlit
22bb0 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b  e3 *db, Table*);
22bc0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
22bd0 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73  VtabDisconnect(s
22be0 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c  qlite3 *db, Tabl
22bf0 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71  e *p);.   int sq
22c00 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73 71  lite3VtabSync(sq
22c10 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a  lite3 *db, Vdbe*
22c20 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
22c30 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71  3VtabRollback(sq
22c40 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69  lite3 *db);.   i
22c50 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  nt sqlite3VtabCo
22c60 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  mmit(sqlite3 *db
22c70 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
22c80 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c  e3VtabLock(VTabl
22c90 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  e *);.   void sq
22ca0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
22cb0 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f  VTable *);.   vo
22cc0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  id sqlite3VtabUn
22cd0 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33  lockList(sqlite3
22ce0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
22cf0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
22d00 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20  sqlite3 *, int, 
22d10 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  int);.   void sq
22d20 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
22d30 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c  rrmsg(Vdbe*, sql
22d40 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20  ite3_vtab*);.   
22d50 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47  VTable *sqlite3G
22d60 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33  etVTable(sqlite3
22d70 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20 20 64  *, Table*);.#  d
22d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
22d90 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
22da0 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
22db0 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
22dc0 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
22dd0 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69  lite3VtabMakeWri
22de0 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62  table(Parse*,Tab
22df0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
22e00 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65  e3VtabBeginParse
22e10 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
22e20 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
22e30 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
22e40 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72  te3VtabFinishPar
22e50 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
22e60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
22e70 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73  VtabArgInit(Pars
22e80 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
22e90 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50  3VtabArgExtend(P
22ea0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
22eb0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
22ec0 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  allCreate(sqlite
22ed0 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
22ee0 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  har *, char **);
22ef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
22f00 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73  CallConnect(Pars
22f10 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e*, Table*);.int
22f20 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
22f30 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a  Destroy(sqlite3*
22f40 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
22f50 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
22f60 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74  3VtabBegin(sqlit
22f70 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b  e3 *, VTable *);
22f80 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
22f90 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e  3VtabOverloadFun
22fa0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c  ction(sqlite3 *,
22fb0 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41  FuncDef*, int nA
22fc0 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  rg, Expr*);.void
22fd0 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46   sqlite3InvalidF
22fe0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  unction(sqlite3_
22ff0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
23000 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73  ite3_value**);.s
23010 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
23020 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
23030 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
23040 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
23050 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
23060 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
23070 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
23080 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
23090 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
230a0 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
230b0 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
230c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
230d0 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  set(Parse*);.int
230e0 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
230f0 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
23100 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
23110 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
23120 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
23130 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
23140 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
23150 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
23160 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
23170 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
23180 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
23190 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
231a0 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
231b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
231c0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
231d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
231e0 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
231f0 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
23200 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
23210 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
23220 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
23230 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
23240 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
23250 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
23260 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
23270 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
23280 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
23290 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
232a0 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
232b0 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
232c0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
232d0 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
232e0 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
232f0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
23300 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
23310 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
23320 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
23330 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
23340 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
23350 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
23360 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
23370 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
23380 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
23390 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
233a0 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
233b0 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 0a 2a 2a  tionality is .**
233c0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
233d0 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
233e0 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
233f0 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
23400 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
23410 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23420 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
23430 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
23440 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
23450 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
23460 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
23470 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
23480 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
23490 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
234a0 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
234b0 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
234c0 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
234d0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
234e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
234f0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
23500 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
23510 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
23520 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
23530 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
23540 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
23550 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
23560 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
23570 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
23580 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
23590 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
235a0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
235b0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
235c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
235d0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
235e0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
235f0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
23600 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
23610 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
23620 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
23630 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23640 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
23650 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64 69 66  c,d)    0.#endif
23660 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23670 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
23680 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
23690 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
236a0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
236b0 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
236c0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
236d0 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
236e0 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
236f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
23700 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
23710 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23720 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
23730 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
23740 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
23750 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
23760 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
23770 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
23780 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
23790 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
237a0 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
237b0 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
237c0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
237d0 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
237e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
237f0 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
23800 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
23810 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
23820 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
23830 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
23840 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
23850 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  ent if SQLITE_OM
23860 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
23870 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65  ** is not define
23880 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  d..*/.#ifndef SQ
23890 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
238a0 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73 71  N_TEST.  void sq
238b0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
238c0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
238d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
238e0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
238f0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
23900 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
23910 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
23920 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
23930 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
23940 0a 23 65 6e 64 69 66 0a 0a 23 64 65 66 69 6e 65  .#endif..#define
23950 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
23960 20 20 20 20 20 20 20 20 20 20 31 0a 23 64 65 66            1.#def
23970 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 23               2.#
23990 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
239a0 49 4e 44 45 58 5f 41 53 43 20 20 20 20 20 20 20  INDEX_ASC       
239b0 33 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  3.#define IN_IND
239c0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
239d0 20 20 20 34 0a 69 6e 74 20 73 71 6c 69 74 65 33     4.int sqlite3
239e0 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73  FindInIndex(Pars
239f0 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  e *, Expr *, int
23a00 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
23a10 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
23a20 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c  _WRITE.  int sql
23a30 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
23a40 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
23a50 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
23a60 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
23a70 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  , int);.  int sq
23a80 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
23a90 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
23aa0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
23ab0 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
23ac0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 20 20 69  te3_file *);.  i
23ad0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
23ae0 6c 45 78 69 73 74 73 28 73 71 6c 69 74 65 33 5f  lExists(sqlite3_
23af0 66 69 6c 65 20 2a 70 29 3b 0a 23 65 6c 73 65 0a  file *p);.#else.
23b00 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23b10 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 70 56 66  3JournalSize(pVf
23b20 73 29 20 28 28 70 56 66 73 29 2d 3e 73 7a 4f 73  s) ((pVfs)->szOs
23b30 46 69 6c 65 29 0a 20 20 23 64 65 66 69 6e 65 20  File).  #define 
23b40 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78  sqlite3JournalEx
23b50 69 73 74 73 28 70 29 20 31 0a 23 65 6e 64 69 66  ists(p) 1.#endif
23b60 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ..void sqlite3Me
23b70 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
23b80 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 69 6e  ite3_file *);.in
23b90 74 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  t sqlite3MemJour
23ba0 6e 61 6c 53 69 7a 65 28 76 6f 69 64 29 3b 0a 69  nalSize(void);.i
23bb0 6e 74 20 73 71 6c 69 74 65 33 49 73 4d 65 6d 4a  nt sqlite3IsMemJ
23bc0 6f 75 72 6e 61 6c 28 73 71 6c 69 74 65 33 5f 66  ournal(sqlite3_f
23bd0 69 6c 65 20 2a 29 3b 0a 0a 23 69 66 20 53 51 4c  ile *);..#if SQL
23be0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
23bf0 54 48 3e 30 0a 20 20 76 6f 69 64 20 73 71 6c 69  TH>0.  void sqli
23c00 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
23c10 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
23c20 45 78 70 72 20 2a 70 29 3b 0a 20 20 69 6e 74 20  Expr *p);.  int 
23c30 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
23c40 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
23c50 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
23c60 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
23c70 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
23c80 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
23c90 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
23ca0 68 74 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e  ht(x,y).  #defin
23cb0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
23cc0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
23cd0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
23ce0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
23cf0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
23d00 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
23d10 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
23d20 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
23d30 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
23d40 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
23d50 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
23d60 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
23d70 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
23d80 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
23d90 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
23da0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23db0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
23dc0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
23dd0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
23de0 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
23df0 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
23e00 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
23e10 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
23e20 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
23e30 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
23e40 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
23e50 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
23e60 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
23e70 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
23e80 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
23e90 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
23ea0 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
23eb0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
23ec0 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
23ed0 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65  ENABLE IOTRACE e
23ee0 78 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67  xists then the g
23ef0 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a  lobal variable.*
23f00 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  * sqlite3IoTrace
23f10 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
23f20 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72   a printf-like r
23f30 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a  outine used to.*
23f40 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63  * print I/O trac
23f50 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 20 0a 2a  ing messages. .*
23f60 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
23f70 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23  ENABLE_IOTRACE.#
23f80 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
23f90 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  A)  if( sqlite3I
23fa0 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65  oTrace ){ sqlite
23fb0 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20  3IoTrace A; }.  
23fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
23fd0 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a  IOTraceSql(Vdbe*
23fe0 29 3b 0a 53 51 4c 49 54 45 5f 45 58 54 45 52 4e  );.SQLITE_EXTERN
23ff0 20 76 6f 69 64 20 28 2a 73 71 6c 69 74 65 33 49   void (*sqlite3I
24000 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
24010 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
24020 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
24030 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
24040 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
24050 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
24060 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
24070 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
24080 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
24090 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
240a0 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
240b0 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
240c0 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
240d0 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
240e0 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
240f0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
24100 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
24110 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
24120 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
24130 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
24140 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
24150 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
24160 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
24170 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
24180 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
24190 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
241a0 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
241b0 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
241c0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
241d0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
241e0 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
241f0 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
24200 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
24210 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
24220 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
24230 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
24240 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
24250 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
24260 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
24270 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
24280 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
24290 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
242a0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
242b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
242c0 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
242d0 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
242e0 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
242f0 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
24300 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
24310 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
24320 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
24330 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
24340 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
24350 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
24360 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
24370 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
24380 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
24390 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
243a0 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
243b0 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
243c0 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
243d0 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
243e0 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
243f0 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
24400 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
24410 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
24420 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
24430 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
24440 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
24450 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
24460 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
24470 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
24480 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
24490 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
244a0 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
244b0 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
244c0 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
244d0 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
244e0 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
244f0 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
24500 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
24510 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
24520 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
24530 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
24540 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
24550 72 61 69 6e 74 2e 20 0a 2a 2a 0a 2a 2a 20 41 6c  raint. .**.** Al
24560 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
24570 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
24580 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
24590 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
245a0 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
245b0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
245c0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
245d0 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
245e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
245f0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
24600 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
24610 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
24620 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
24630 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
24640 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
24650 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
24660 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
24670 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24680 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
24690 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
246a0 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
246b0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
246c0 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
246d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
246e0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
246f0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
24700 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
24710 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
24720 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
24730 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
24740 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
24750 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
24760 2a 20 4d 69 67 68 74 20 68 61 76 65 20 62 65 65  * Might have bee
24770 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f  n lookaside memo
24780 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ry */.#define ME
24790 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
247a0 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
247b0 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
247c0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
247d0 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
247e0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
247f0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
24800 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 44  define MEMTYPE_D
24810 42 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  B         0x10  
24820 2f 2a 20 55 73 65 73 20 73 71 6c 69 74 65 33 44  /* Uses sqlite3D
24830 62 4d 61 6c 6c 6f 63 2c 20 6e 6f 74 20 73 71 6c  bMalloc, not sql
24840 69 74 65 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 0a 23  ite_malloc */..#
24850 65 6e 64 69 66 20 2f 2a 20 5f 53 51 4c 49 54 45  endif /* _SQLITE
24860 49 4e 54 5f 48 5f 20 2a 2f 0a                    INT_H_ */.