/ Hex Artifact Content
Login

Artifact 41c5b67e6c946ae1e95a4b32f9a077c36774e0bb:


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 52 6f 77 53  edef struct RowS
6100: 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64  et RowSet;.typed
6110: 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f  ef struct Savepo
6120: 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74  int Savepoint;.t
6130: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
6140: 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70  lect Select;.typ
6150: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
6160: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
6170: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6180: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
6190: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
61a0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
61b0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
61c0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
61d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
61e0: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
61f0: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
6200: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
6210: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6220: 54 72 69 67 67 65 72 20 54 72 69 67 67 65 72 3b  Trigger Trigger;
6230: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6240: 54 72 69 67 67 65 72 50 72 67 20 54 72 69 67 67  TriggerPrg Trigg
6250: 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73  erPrg;.typedef s
6260: 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
6270: 70 20 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74  p TriggerStep;.t
6280: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 55 6e  ypedef struct Un
6290: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70  packedRecord Unp
62a0: 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70  ackedRecord;.typ
62b0: 65 64 65 66 20 73 74 72 75 63 74 20 56 54 61 62  edef struct VTab
62c0: 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64  le VTable;.typed
62d0: 65 66 20 73 74 72 75 63 74 20 56 74 61 62 43 74  ef struct VtabCt
62e0: 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64  x VtabCtx;.typed
62f0: 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72  ef struct Walker
6300: 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66   Walker;.typedef
6310: 20 73 74 72 75 63 74 20 57 68 65 72 65 49 6e 66   struct WhereInf
6320: 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 0a 2f 2a  o WhereInfo;../*
6330: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
6340: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
6350: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
6360: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a  r the "u8" and .
6370: 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22  ** "BusyHandler"
6380: 20 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e   typedefs. vdbe.
6390: 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20  h also requires 
63a0: 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61  a few of the opa
63b0: 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  que.** pointer t
63c0: 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44  ypes (i.e. FuncD
63d0: 65 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76  ef) defined abov
63e0: 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  e..*/.#include "
63f0: 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64  btree.h".#includ
6400: 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c  e "vdbe.h".#incl
6410: 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69  ude "pager.h".#i
6420: 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68  nclude "pcache.h
6430: 22 0a 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e  "..#include "os.
6440: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74  h".#include "mut
6450: 65 78 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ex.h".../*.** Ea
6460: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
6470: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
6480: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
6490: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
64a0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
64b0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
64c0: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
64d0: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
64e0: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
64f0: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
6500: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
6510: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
6520: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
6530: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
6540: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
6550: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
6560: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
6570: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
6580: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
6590: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
65a0: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
65b0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
65c0: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
65d0: 73 65 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  se */.  Btree *p
65e0: 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Bt;          /* 
65f0: 54 68 65 20 42 2a 54 72 65 65 20 73 74 72 75 63  The B*Tree struc
6600: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 64 61  ture for this da
6610: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
6620: 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c   u8 safety_level
6630: 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67  ;     /* How agg
6640: 72 65 73 73 69 76 65 20 61 74 20 73 79 6e 63 69  ressive at synci
6650: 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20  ng data to disk 
6660: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
6670: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
6680: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
6690: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
66a0: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
66b0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
66c0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
66d0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
66e0: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
66f0: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
6700: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
6710: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
6720: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
6730: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
6740: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
6750: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
6760: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
6770: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
6780: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
6790: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
67a0: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
67b0: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
67c0: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
67d0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
67e0: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
67f0: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
6800: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
6810: 65 63 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65  ect..** .** Sche
6820: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
6830: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
6840: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
6850: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
6860: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
6870: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
6880: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
6890: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
68a0: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
68b0: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
68c0: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
68d0: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
68e0: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
68f0: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
6900: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
6910: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
6920: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
6930: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
6940: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
6950: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
6960: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
6970: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
6980: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
6990: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
69a0: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
69b0: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
69c0: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
69d0: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
69e0: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
69f0: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
6a00: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
6a10: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
6a20: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
6a30: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
6a40: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
6a50: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
6a60: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
6a70: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
6a80: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
6a90: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
6aa0: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
6ab0: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
6ac0: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
6ad0: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
6ae0: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
6af0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
6b00: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
6b10: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
6b20: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
6b30: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
6b40: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
6b50: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
6b60: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
6b70: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
6b80: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
6b90: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
6ba0: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
6bb0: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
6bc0: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
6bd0: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
6be0: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
6bf0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
6c00: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
6c10: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
6c20: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
6c30: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
6c40: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
6c50: 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  6 flags;        
6c60: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
6c70: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
6c80: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
6c90: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
6ca0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
6cb0: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
6cc0: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
6cd0: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
6ce0: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
6cf0: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
6d00: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
6d10: 65 20 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  e .** Db.pSchema
6d20: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
6d30: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
6d40: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6d50: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
6d60: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26  .pSchema->flags&
6d70: 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
6d80: 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65  ne DbHasAnyPrope
6d90: 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44  rty(D,I,P)  (((D
6da0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
6db0: 61 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  a->flags&(P))!=0
6dc0: 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50  ).#define DbSetP
6dd0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
6de0: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
6df0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28  Schema->flags|=(
6e00: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
6e10: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
6e20: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
6e30: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d  pSchema->flags&=
6e40: 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ~(P)../*.** Allo
6e50: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
6e60: 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66  he DB.pSchema->f
6e70: 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
6e80: 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c  * The DB_SchemaL
6e90: 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73 65  oaded flag is se
6ea0: 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74 61  t after the data
6eb0: 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20  base schema has 
6ec0: 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74  been.** read int
6ed0: 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20  o internal hash 
6ee0: 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42  tables..**.** DB
6ef0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65  _UnresetViews me
6f00: 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20  ans that one or 
6f10: 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65 20  more views have 
6f20: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61  column names tha
6f30: 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66  t.** have been f
6f40: 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74  illed out.  If t
6f50: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
6f60: 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20  s, these column 
6f70: 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63  names might.** c
6f80: 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68  hanges and so th
6f90: 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64  e view will need
6fa0: 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f   to be reset..*/
6fb0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65  .#define DB_Sche
6fc0: 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30  maLoaded    0x00
6fd0: 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d  01  /* The schem
6fe0: 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65  a has been loade
6ff0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  d */.#define DB_
7000: 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20 20  UnresetViews    
7010: 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20  0x0002  /* Some 
7020: 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69 6e  views have defin
7030: 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ed column names 
7040: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d  */.#define DB_Em
7050: 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30 78  pty           0x
7060: 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c  0004  /* The fil
7070: 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67  e is empty (leng
7080: 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a  th 0 bytes) */..
7090: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
70a0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69   of different ki
70b0: 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68  nds of things th
70c0: 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65  at can be limite
70d0: 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73  d.** using the s
70e0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69  qlite3_limit() i
70f0: 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65  nterface..*/.#de
7100: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49  fine SQLITE_N_LI
7110: 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49  MIT (SQLITE_LIMI
7120: 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b  T_TRIGGER_DEPTH+
7130: 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  1)../*.** Lookas
7140: 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20  ide malloc is a 
7150: 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a  set of fixed-siz
7160: 65 20 62 75 66 66 65 72 73 20 74 68 61 74 20 63  e buffers that c
7170: 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f  an be used.** to
7180: 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74   satisfy small t
7190: 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20  ransient memory 
71a0: 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65  allocation reque
71b0: 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a  sts for objects.
71c0: 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ** associated wi
71d0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
71e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
71f0: 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66  ion.  The use of
7200: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61  .** lookaside ma
7210: 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20  lloc provides a 
7220: 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66  significant perf
7230: 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d  ormance enhancem
7240: 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31  ent.** (approx 1
7250: 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20  0%) by avoiding 
7260: 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f  numerous malloc/
7270: 66 72 65 65 20 72 65 71 75 65 73 74 73 20 77 68  free requests wh
7280: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53  ile parsing.** S
7290: 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  QL statements..*
72a0: 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69  *.** The Lookasi
72b0: 64 65 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c  de structure hol
72c0: 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ds configuration
72d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
72e0: 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73  ut the.** lookas
72f0: 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79  ide malloc subsy
7300: 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69  stem.  Each avai
7310: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  lable memory all
7320: 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68  ocation in.** th
7330: 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73  e lookaside subs
7340: 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20  ystem is stored 
7350: 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  on a linked list
7360: 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f   of LookasideSlo
7370: 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a  t.** objects..**
7380: 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** Lookaside al
7390: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e  locations are on
73a0: 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f  ly allowed for o
73b0: 62 6a 65 63 74 73 20 74 68 61 74 20 61 72 65 20  bjects that are 
73c0: 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69  associated.** wi
73d0: 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  th a particular 
73e0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
73f0: 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68  ion.  Hence, sch
7400: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
7410: 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f  cannot.** be sto
7420: 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65  red in lookaside
7430: 20 62 65 63 61 75 73 65 20 69 6e 20 73 68 61 72   because in shar
7440: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68  ed cache mode th
7450: 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  e schema informa
7460: 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65  tion.** is share
7470: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61  d by multiple da
7480: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7490: 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  ns.  Therefore, 
74a0: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
74b0: 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74   schema informat
74c0: 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69  ion, the Lookasi
74d0: 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67  de.bEnabled flag
74e0: 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74   is cleared so t
74f0: 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  hat.** lookaside
7500: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
7510: 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e   not used to con
7520: 73 74 72 75 63 74 20 74 68 65 20 73 63 68 65 6d  struct the schem
7530: 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74  a objects..*/.st
7540: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b  ruct Lookaside {
7550: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
7560: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
7570: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
7580: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
7590: 75 38 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20  u8 bEnabled;    
75a0: 20 20 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65          /* False
75b0: 20 74 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20   to disable new 
75c0: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
75d0: 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d  tions */.  u8 bM
75e0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
75f0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
7600: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
7610: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
7620: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
7630: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
7640: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
7650: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
7660: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
7670: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
7680: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
7690: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
76a0: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
76b0: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
76c0: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
76d0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
76e0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
76f0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
7700: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
7710: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
7720: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
7730: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
7740: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
7750: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
7760: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
7770: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
7780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
7790: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
77a0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
77b0: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
77c0: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
77d0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
77e0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
77f0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
7800: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
7810: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
7820: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
7830: 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65   for function de
7840: 66 69 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  finitions..**.**
7850: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
7860: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
7870: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
7880: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
7890: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
78a0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
78b0: 63 44 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e  cDef.pHash chain
78c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
78d0: 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63  DefHash {.  Func
78e0: 44 65 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20  Def *a[23];     
78f0: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
7900: 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  for functions */
7910: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  .};../*.** Each 
7920: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7930: 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ion is an instan
7940: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
7950: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
7960: 2f 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  /.struct sqlite3
7970: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73   {.  sqlite3_vfs
7980: 20 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20   *pVfs;         
7990: 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61     /* OS Interfa
79a0: 63 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56  ce */.  struct V
79b0: 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
79c0: 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
79d0: 20 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20   active virtual 
79e0: 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f  machines */.  Co
79f0: 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c  llSeq *pDfltColl
7a00: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
7a10: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61  he default colla
7a20: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42  ting sequence (B
7a30: 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69  INARY) */.  sqli
7a40: 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78  te3_mutex *mutex
7a50: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
7a60: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f  nection mutex */
7a70: 0a 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20  .  Db *aDb;     
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73   /* All backends
7aa0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20   */.  int nDb;  
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
7ad0: 20 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e   backends curren
7ae0: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20  tly in use */.  
7af0: 69 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20  int flags;      
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7b10: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66   Miscellaneous f
7b20: 6c 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20  lags. See below 
7b30: 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77  */.  i64 lastRow
7b40: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
7b50: 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d     /* ROWID of m
7b60: 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72  ost recent inser
7b70: 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
7b80: 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20  .  i64 szMmap;  
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ba0: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70   /* Default mmap
7bb0: 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f  _size setting */
7bc0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
7bd0: 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20  openFlags;      
7be0: 20 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64   /* Flags passed
7bf0: 20 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e   to sqlite3_vfs.
7c00: 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74  xOpen() */.  int
7c10: 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
7c20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
7c30: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
7c40: 63 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20  code (SQLITE_*) 
7c50: 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b  */.  int errMask
7c60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7c70: 20 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63     /* & result c
7c80: 6f 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62  odes with this b
7c90: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
7ca0: 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c  */.  u16 dbOptFl
7cb0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
7cc0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65     /* Flags to e
7cd0: 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70  nable/disable op
7ce0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20  timizations */. 
7cf0: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7d10: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
7d20: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
7d30: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
7d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
7d50: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
7d60: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
7d70: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7d90: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
7da0: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
7db0: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64  ailure */.  u8 d
7dc0: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20  fltLockMode;    
7dd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
7de0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64  ault locking-mod
7df0: 65 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64  e for attached d
7e00: 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63  bs */.  signed c
7e10: 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b  har nextAutovac;
7e20: 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63        /* Autovac
7e30: 20 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56   setting after V
7e40: 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a  ACUUM if >=0 */.
7e50: 20 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72    u8 suppressErr
7e60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7e70: 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20  /* Do not issue 
7e80: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69  error messages i
7e90: 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76  f true */.  u8 v
7ea0: 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20  tabOnConflict;  
7eb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
7ec0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72  ue to return for
7ed0: 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66   s3_vtab_on_conf
7ee0: 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69  lict() */.  u8 i
7ef0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
7f00: 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75  point;    /* Tru
7f10: 65 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f  e if the outermo
7f20: 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  st savepoint is 
7f30: 61 20 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  a TS */.  int ne
7f40: 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20  xtPagesize;     
7f50: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73          /* Pages
7f60: 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d  ize after VACUUM
7f70: 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20   if >0 */.  u32 
7f80: 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20  magic;          
7f90: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67            /* Mag
7fa0: 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65  ic number for de
7fb0: 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73  tect library mis
7fc0: 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68  use */.  int nCh
7fd0: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
7fe0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
7ff0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
8000: 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  te3_changes() */
8010: 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61  .  int nTotalCha
8020: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
8030: 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e   /* Value return
8040: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f  ed by sqlite3_to
8050: 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f  tal_changes() */
8060: 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51  .  int aLimit[SQ
8070: 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20  LITE_N_LIMIT];  
8080: 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20   /* Limits */.  
8090: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
80a0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
80b0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
80c0: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
80d0: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
80e0: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
80f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
8100: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
8110: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
8120: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8140: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
8150: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
8160: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
8170: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
8180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8190: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
81a0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
81b0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
81c0: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
81d0: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
81e0: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
81f0: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
8200: 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74  .  } init;.  int
8210: 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20   nVdbeActive;   
8220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
8230: 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75  mber of VDBEs cu
8240: 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20  rrently running 
8250: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65  */.  int nVdbeRe
8260: 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ad;             
8270: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
8280: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
8290: 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20  t read or write 
82a0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72  */.  int nVdbeWr
82b0: 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ite;            
82c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
82d0: 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61  active VDBEs tha
82e0: 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  t read and write
82f0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45   */.  int nVdbeE
8300: 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  xec;            
8310: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
8320: 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
8330: 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20   VdbeExec() */. 
8340: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8360: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
8370: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
8380: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
8390: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
83a0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
83b0: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
83c0: 6c 65 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  les */.  void (*
83d0: 78 54 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f  xTrace)(void*,co
83e0: 6e 73 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20  nst char*);     
83f0: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
8400: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
8410: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
8440: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
8450: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
8460: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
8470: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
8480: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
8490: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
84a0: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
84b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
84c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
84d0: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
84e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
84f0: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8510: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
8520: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
8530: 29 20 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a  ) */   .  int (*
8540: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
8550: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
8560: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
8570: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
8580: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
85a0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
85b0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
85c0: 29 20 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28  ) */   .  void (
85d0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
85e0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
85f0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
8600: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
8610: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
8620: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
8630: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
8640: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
8650: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
8660: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 6e 64  te_int64);.#ifnd
8670: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8680: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
8690: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
86a0: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
86b0: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
86c0: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
86d0: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
86e0: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
86f0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
8700: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
8710: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
8720: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
8730: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
8740: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
8750: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
8760: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
8770: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
8780: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
8790: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
87a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
87b0: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
87c0: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
87d0: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
87e0: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
87f0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
8800: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
8810: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
8820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
8830: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
8840: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
8850: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
8860: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
8870: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
8880: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
8890: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
88a0: 41 54 49 4f 4e 0a 20 20 69 6e 74 20 28 2a 78 41  ATION.  int (*xA
88b0: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
88c0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
88d0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
88e0: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
8920: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
8930: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
8940: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
8950: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
8960: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
8970: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
8980: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
8990: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
89a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
89b0: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
89c0: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
89d0: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
89e0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
89f0: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
8a00: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
8a10: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
8a20: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
8a30: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
8a40: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
8a50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
8a60: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
8a70: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
8a80: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
8a90: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
8aa0: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
8ab0: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
8ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
8ad0: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
8ae0: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
8af0: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
8b00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
8b10: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
8b20: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
8b30: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
8b40: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
8b50: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
8b60: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
8b70: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
8b80: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
8b90: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
8ba0: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
8bb0: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
8bc0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
8bd0: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
8be0: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
8bf0: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
8c00: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
8c10: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
8c20: 0a 20 20 46 75 6e 63 44 65 66 48 61 73 68 20 61  .  FuncDefHash a
8c30: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
8c40: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
8c50: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
8c60: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
8c70: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
8c80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
8c90: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
8ca0: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
8cb0: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
8cc0: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
8cd0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
8ce0: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
8d00: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
8d10: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
8d20: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
8d30: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
8d40: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
8d50: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
8d60: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
8d70: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
8d80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
8d90: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
8da0: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
8db0: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8dd0: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
8de0: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
8df0: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
8e00: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
8e10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
8e20: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
8e30: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
8e40: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
8e50: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
8e60: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
8e70: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
8e80: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
8e90: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
8ea0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
8eb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
8ec0: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
8ed0: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
8ee0: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
8ef0: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
8f00: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
8f10: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
8f20: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
8f30: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
8f40: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
8f50: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
8f60: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
8f70: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
8f80: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
8f90: 5f 4d 41 53 54 45 52 20 0a 20 20 2a 2a 20 6d 75  _MASTER .  ** mu
8fa0: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
8fb0: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
8fc0: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
8fd0: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 20 0a 20   in notify.c. . 
8fe0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
8ff0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
9000: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
9010: 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69   that X is waiti
9020: 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a  ng for Y to.  **
9030: 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20   unlock so that 
9040: 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a  it can proceed..
9050: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
9060: 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  .pBlockingConnec
9070: 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65  tion==Y, that me
9080: 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69  ans that somethi
9090: 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a  ng that X tried.
90a0: 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f    ** tried to do
90b0: 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64   recently failed
90c0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
90d0: 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65  LOCKED error due
90e0: 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68   to locks.  ** h
90f0: 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20  eld by Y..  */. 
9100: 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b   sqlite3 *pBlock
9110: 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f  ingConnection; /
9120: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  * Connection tha
9130: 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f  t caused SQLITE_
9140: 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69  LOCKED */.  sqli
9150: 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  te3 *pUnlockConn
9160: 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ection;         
9170: 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20    /* Connection 
9180: 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c  to watch for unl
9190: 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ock */.  void *p
91a0: 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20  UnlockArg;      
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
91c0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55  * Argument to xU
91d0: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20  nlockNotify */. 
91e0: 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e   void (*xUnlockN
91f0: 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20  otify)(void **, 
9200: 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b  int);  /* Unlock
9210: 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b   notify callback
9220: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
9230: 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20  NextBlocked;    
9240: 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
9250: 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b  ist of all block
9260: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a  ed connections *
9270: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
9280: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
9290: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
92a0: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
92b0: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 4e  e..*/.#define EN
92c0: 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62  C(db) ((db)->aDb
92d0: 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63  [0].pSchema->enc
92e0: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
92f0: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
9300: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
9310: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9320: 45 5f 56 64 62 65 54 72 61 63 65 20 20 20 20 20  E_VdbeTrace     
9330: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
9340: 54 72 75 65 20 74 6f 20 74 72 61 63 65 20 56 44  True to trace VD
9350: 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a  BE execution */.
9360: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
9370: 6e 74 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78  nternChanges  0x
9380: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63  00000002  /* Unc
9390: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
93a0: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
93b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
93c0: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
93d0: 30 30 30 30 30 30 34 20 20 2f 2a 20 55 73 65 20  0000004  /* Use 
93e0: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
93f0: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
9400: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
9410: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
9420: 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75  00008  /* Use fu
9430: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
9440: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
9450: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
9460: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
9470: 30 31 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  010  /* OK to sp
9480: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
9490: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
94a0: 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20  E_FullColNames  
94b0: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
94c0: 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e  Show full column
94d0: 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54   names on SELECT
94e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
94f0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
9500: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
9510: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
9520: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
9530: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
9540: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
9550: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
9560: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
9570: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
95b0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
95c0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95f0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
9600: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
9610: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
9620: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
9630: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
9640: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
9650: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
9660: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9690: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
96a0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
96b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
96c0: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 30  Trace       0x00
96d0: 30 30 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67  000200  /* Debug
96e0: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
96f0: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
9700: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
9710: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 30 30 30  Listing    0x000
9720: 30 30 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00400  /* Debug 
9730: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
9740: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
9750: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74  fine SQLITE_Writ
9760: 65 53 63 68 65 6d 61 20 20 20 20 30 78 30 30 30  eSchema    0x000
9770: 30 30 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20  00800  /* OK to 
9780: 75 70 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41  update SQLITE_MA
9790: 53 54 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20  STER */.#define 
97a0: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
97b0: 54 72 61 63 65 20 30 78 30 30 30 30 31 30 30 30  Trace 0x00001000
97c0: 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74    /* Trace sqlit
97d0: 65 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61  e3VdbeAddOp() ca
97e0: 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  lls */.#define S
97f0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
9800: 6b 73 20 20 20 30 78 30 30 30 30 32 30 30 30 20  ks   0x00002000 
9810: 20 2f 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72   /* Do not enfor
9820: 63 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ce check constra
9830: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
9840: 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
9850: 6d 69 74 74 65 64 20 30 78 30 30 30 34 30 30 30  mitted 0x0004000
9860: 20 20 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d    /* For shared-
9870: 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64  cache mode */.#d
9880: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
9890: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
98a0: 30 30 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74  008000  /* Creat
98b0: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
98c0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
98d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
98e0: 63 6f 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30  coveryMode   0x0
98f0: 30 30 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f  0010000  /* Igno
9900: 72 65 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73  re schema errors
9910: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9920: 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20  TE_ReverseOrder 
9930: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
9940: 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72   Reverse unorder
9950: 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64  ed SELECTs */.#d
9960: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63  efine SQLITE_Rec
9970: 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30  Triggers    0x00
9980: 30 34 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  040000  /* Enabl
9990: 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67  e recursive trig
99a0: 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gers */.#define 
99b0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
99c0: 79 73 20 20 20 20 30 78 30 30 30 38 30 30 30 30  ys    0x00080000
99d0: 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72    /* Enforce for
99e0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
99f0: 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65  ints  */.#define
9a00: 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65   SQLITE_AutoInde
9a10: 78 20 20 20 20 20 20 30 78 30 30 31 30 30 30 30  x      0x0010000
9a20: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74  0  /* Enable aut
9a30: 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a  omatic indexes *
9a40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a50: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
9a60: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50  0x00200000  /* P
9a70: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
9a80: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
9a90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f  define SQLITE_Lo
9aa0: 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30  adExtension  0x0
9ab0: 30 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0400000  /* Enab
9ac0: 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f  le load_extensio
9ad0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
9ae0: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
9af0: 72 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  r  0x00800000  /
9b00: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
9b10: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
9b20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
9b30: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 31 30  rFKs       0x010
9b40: 30 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  00000  /* Defer 
9b50: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
9b60: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
9b70: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
9b80: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
9b90: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
9ba0: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  ase changes */..
9bb0: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
9bc0: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
9bd0: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
9be0: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
9bf0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
9c00: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
9c10: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
9c20: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
9c30: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
9c40: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
9c50: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
9c60: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
9c70: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
9c80: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
9c90: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
9ca0: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
9cb0: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
9cc0: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
9cd0: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
9ce0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9cf0: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
9d00: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
9d10: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
9d20: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
9d30: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
9d40: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
9d50: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
9d60: 72 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ring */.#define 
9d70: 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41 73  SQLITE_IdxRealAs
9d80: 49 6e 74 20 20 20 30 78 30 30 31 30 20 20 20 2f  Int   0x0010   /
9d90: 2a 20 53 74 6f 72 65 20 52 45 41 4c 20 61 73 20  * Store REAL as 
9da0: 49 4e 54 20 69 6e 20 69 6e 64 69 63 65 73 20 2a  INT in indices *
9db0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9dc0: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
9dd0: 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54  0x0020   /* DIST
9de0: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
9df0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
9e00: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
9e10: 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20  n   0x0040   /* 
9e20: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
9e30: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
9e40: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
9e50: 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f  xJoin 0x0080   /
9e60: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
9e70: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
9e80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9e90: 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30  SubqCoroutine  0
9ea0: 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75  x0100   /* Evalu
9eb0: 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61  ate subqueries a
9ec0: 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a  s coroutines */.
9ed0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
9ee0: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
9ef0: 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0200   /* Transi
9f00: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
9f10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9f20: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
9f30: 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d    0x0400   /* Om
9f40: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
9f50: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
9f60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
9f70: 33 20 20 20 20 20 20 20 20 20 20 30 78 30 38 30  3          0x080
9f80: 30 20 20 20 2f 2a 20 55 73 65 20 74 68 65 20 53  0   /* Use the S
9f90: 51 4c 49 54 45 5f 53 54 41 54 33 20 74 61 62 6c  QLITE_STAT3 tabl
9fa0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
9fb0: 49 54 45 5f 41 64 6a 75 73 74 4f 75 74 45 73 74  ITE_AdjustOutEst
9fc0: 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20 41     0x1000   /* A
9fd0: 64 6a 75 73 74 20 6f 75 74 70 75 74 20 65 73 74  djust output est
9fe0: 69 6d 61 74 65 73 20 75 73 69 6e 67 20 57 48 45  imates using WHE
9ff0: 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  RE */.#define SQ
a000: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
a010: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
a020: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
a030: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
a040: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
a050: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
a060: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
a070: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
a080: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
a090: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
a0a0: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
a0b0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
a0c0: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
a0d0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
a0e0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
a0f0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
a100: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
a110: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
a120: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
a130: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
a140: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
a150: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
a160: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
a170: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
a180: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
a190: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
a1a0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
a1b0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
a1c0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
a1d0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
a1e0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
a1f0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
a200: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
a210: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
a220: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
a230: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
a240: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
a250: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
a260: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
a270: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
a280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a290: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
a2a0: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
a2b0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
a2c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
a2d0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
a2e0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
a2f0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
a300: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
a310: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a320: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
a330: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
a340: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
a350: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
a360: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
a370: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
a380: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
a390: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
a3a0: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
a3b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
a3c0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
a3d0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
a3e0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
a3f0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
a400: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
a410: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
a420: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
a430: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
a440: 72 75 63 74 75 72 65 2e 20 20 41 20 70 6f 69 6e  ructure.  A poin
a450: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
a460: 63 74 75 72 65 20 69 73 20 73 74 6f 72 65 64 20  cture is stored 
a470: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 46  in the sqlite.aF
a480: 75 6e 63 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c  unc.** hash tabl
a490: 65 2e 20 20 57 68 65 6e 20 6d 75 6c 74 69 70 6c  e.  When multipl
a4a0: 65 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65  e functions have
a4b0: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 2c 20   the same name, 
a4c0: 74 68 65 20 68 61 73 68 20 74 61 62 6c 65 0a 2a  the hash table.*
a4d0: 2a 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 6c 69  * points to a li
a4e0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 74 68 65  nked list of the
a4f0: 73 65 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  se structures..*
a500: 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  /.struct FuncDef
a510: 20 7b 0a 20 20 69 31 36 20 6e 41 72 67 3b 20 20   {.  i16 nArg;  
a520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
a530: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
a540: 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69  .  -1 means unli
a550: 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20 66  mited */.  u16 f
a560: 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20  uncFlags;       
a570: 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74  /* Some combinat
a580: 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46 55  ion of SQLITE_FU
a590: 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  NC_* */.  void *
a5a0: 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20 2f  pUserData;     /
a5b0: 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72 61  * User data para
a5c0: 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44  meter */.  FuncD
a5d0: 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ef *pNext;      
a5e0: 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e  /* Next function
a5f0: 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65 20   with same name 
a600: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 75 6e  */.  void (*xFun
a610: 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  c)(sqlite3_conte
a620: 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
a630: 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 52 65 67  value**); /* Reg
a640: 75 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ular function */
a650: 0a 20 20 76 6f 69 64 20 28 2a 78 53 74 65 70 29  .  void (*xStep)
a660: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a670: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a680: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 41 67 67 72 65  lue**); /* Aggre
a690: 67 61 74 65 20 73 74 65 70 20 2a 2f 0a 20 20 76  gate step */.  v
a6a0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
a6b0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a6c0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
a6d0: 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20     /* Aggregate 
a6e0: 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63  finalizer */.  c
a6f0: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
a700: 20 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20      /* SQL name 
a710: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
a720: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
a730: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
a740: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
a750: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
a760: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
a770: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
a780: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
a790: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
a7a0: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
a7b0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  unction */.};../
a7c0: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
a7d0: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
a7e0: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
a7f0: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
a800: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
a810: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
a820: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
a830: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
a840: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
a850: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
a860: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
a870: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
a880: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
a890: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
a8a0: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
a8b0: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
a8c0: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
a8d0: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
a8e0: 73 65 74 20 74 6f 20 0a 2a 2a 20 74 68 65 20 6e  set to .** the n
a8f0: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
a900: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
a910: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
a920: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
a930: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
a940: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
a950: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
a960: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
a970: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
a980: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
a990: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
a9a0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
a9b0: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
a9c0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
a9d0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
a9e0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
a9f0: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
aa00: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
aa10: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
aa20: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
aa30: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
aa40: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
aa50: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
aa60: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
aa70: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
aa80: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
aa90: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
aaa0: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
aab0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
aac0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
aad0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
aae0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
aaf0: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
ab00: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
ab10: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
ab20: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
ab30: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
ab40: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
ab50: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
ab60: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
ab70: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
ab80: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
ab90: 46 41 52 47 2e 20 20 54 68 65 72 65 0a 2a 2a 20  FARG.  There.** 
aba0: 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61  are assert() sta
abb0: 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63  tements in the c
abc0: 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68  ode to verify th
abd0: 69 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  is..*/.#define S
abe0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
abf0: 53 4b 20 20 30 78 30 30 33 20 2f 2a 20 53 51 4c  SK  0x003 /* SQL
ac00: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
ac10: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
ac20: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
ac30: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
ac40: 20 20 20 20 30 78 30 30 34 20 2f 2a 20 43 61 6e      0x004 /* Can
ac50: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
ac60: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
ac70: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ac80: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
ac90: 20 30 78 30 30 38 20 2f 2a 20 43 61 73 65 2d 73   0x008 /* Case-s
aca0: 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74 79  ensitive LIKE-ty
acb0: 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  pe function */.#
acc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
acd0: 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30 31  NC_EPHEM    0x01
ace0: 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20  0 /* Ephemeral. 
acf0: 20 44 65 6c 65 74 65 20 77 69 74 68 20 56 44 42   Delete with VDB
ad00: 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  E */.#define SQL
ad10: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
ad20: 4c 20 30 78 30 32 30 20 2f 2a 20 73 71 6c 69 74  L 0x020 /* sqlit
ad30: 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71  e3GetFuncCollSeq
ad40: 28 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c  () might be call
ad50: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
ad60: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
ad70: 20 20 20 30 78 30 34 30 20 2f 2a 20 42 75 69 6c     0x040 /* Buil
ad80: 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75  t-in length() fu
ad90: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
ada0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  e SQLITE_FUNC_TY
adb0: 50 45 4f 46 20 20 20 30 78 30 38 30 20 2f 2a 20  PEOF   0x080 /* 
adc0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
add0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
ade0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
adf0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 31 30 30  C_COUNT    0x100
ae00: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
ae10: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
ae20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ae30: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
ae40: 30 78 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  0x200 /* Built-i
ae50: 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20  n coalesce() or 
ae60: 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66  ifnull() */.#def
ae70: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ae80: 55 4e 4c 49 4b 45 4c 59 20 30 78 34 30 30 20 2f  UNLIKELY 0x400 /
ae90: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
aea0: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
aeb0: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
aec0: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
aed0: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
aee0: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
aef0: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
af00: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
af10: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
af20: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
af30: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
af40: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
af50: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
af60: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
af70: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
af80: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
af90: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
afa0: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
afb0: 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 69 6d  zName .**     im
afc0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66  plemented by C f
afd0: 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68  unction xFunc th
afe0: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
aff0: 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a  arguments. The.*
b000: 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73  *     value pass
b010: 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61  ed as iArg is ca
b020: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20  st to a (void*) 
b030: 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62  and made availab
b040: 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65  le.**     as the
b050: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
b060: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
b070: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
b080: 6e 2e 20 49 66 20 0a 2a 2a 20 20 20 20 20 61 72  n. If .**     ar
b090: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
b0a0: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
b0b0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
b0c0: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
b0d0: 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45  *.**   AGGREGATE
b0e0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
b0f0: 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20  rg, bNC, xStep, 
b100: 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55  xFinal).**     U
b110: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e  sed to create an
b120: 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
b130: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69  ion definition i
b140: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a  mplemented by.**
b150: 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74       the C funct
b160: 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78  ions xStep and x
b170: 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74  Final. The first
b180: 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73   four parameters
b190: 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65  .**     are inte
b1a0: 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73  rpreted in the s
b1b0: 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66  ame way as the f
b1c0: 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72  irst 4 parameter
b1d0: 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43  s to.**     FUNC
b1e0: 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20  TION()..**.**   
b1f0: 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
b200: 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67  nArg, pArg, flag
b210: 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  s).**     Used t
b220: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
b230: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
b240: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
b250: 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20 20 20  ion zName .**   
b260: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
b270: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
b280: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
b290: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 20   by a call to C 
b2a0: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
b2b0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
b2c0: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
b2d0: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
b2e0: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
b2f0: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
b300: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
b310: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
b320: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
b330: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
b340: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
b350: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
b360: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
b370: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
b380: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
b390: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
b3a0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
b3b0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
b3c0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
b3d0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
b3e0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
b3f0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b400: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b410: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b420: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b430: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
b440: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
b450: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
b460: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
b470: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
b480: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
b490: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
b4a0: 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
b4b0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
b4c0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
b4d0: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
b4e0: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
b4f0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
b500: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
b510: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
b520: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
b530: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
b540: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
b550: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c   0, xFunc, 0, 0,
b560: 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30 7d 0a 23   #zName, 0, 0}.#
b570: 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28  define LIKEFUNC(
b580: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
b590: 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  , flags) \.  {nA
b5a0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
b5b0: 66 6c 61 67 73 2c 20 28 76 6f 69 64 20 2a 29 61  flags, (void *)a
b5c0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
b5d0: 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30   0, 0, #zName, 0
b5e0: 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  , 0}.#define AGG
b5f0: 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
b600: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
b610: 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
b620: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
b630: 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
b640: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
b650: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
b660: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 30 2c  _PTR(arg), 0, 0,
b670: 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
b680: 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a 2a 2a  Name,0,0}../*.**
b690: 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76   All current sav
b6a0: 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72  epoints are stor
b6b0: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c  ed in a linked l
b6c0: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a  ist starting at.
b6d0: 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  ** sqlite3.pSave
b6e0: 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74  point. The first
b6f0: 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20   element in the 
b700: 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74  list is the most
b710: 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65   recently.** ope
b720: 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53  ned savepoint. S
b730: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64  avepoints are ad
b740: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list 
b750: 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f  by the vdbe.** O
b760: 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
b770: 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ruction..*/.stru
b780: 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20  ct Savepoint {. 
b790: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e       /* Savepoin
b7c0: 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d  t name (nul-term
b7d0: 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34  inated) */.  i64
b7e0: 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20   nDeferredCons; 
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65   /* Number of de
b810: 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74  ferred fk violat
b820: 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ions */.  i64 nD
b830: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20  eferredImmCons; 
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b850: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
b860: 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20  red imm fk. */. 
b870: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78   Savepoint *pNex
b880: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b890: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73       /* Parent s
b8a0: 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79  avepoint (if any
b8b0: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
b8c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
b8d0: 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63   used as the sec
b8e0: 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  ond parameter to
b8f0: 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
b900: 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74  t(),.** and as t
b910: 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
b920: 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69  o the OP_Savepoi
b930: 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  nt instruction..
b940: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50  */.#define SAVEP
b950: 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20  OINT_BEGIN      
b960: 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  0.#define SAVEPO
b970: 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31  INT_RELEASE    1
b980: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
b990: 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a  NT_ROLLBACK   2.
b9a0: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
b9b0: 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74  ite module (virt
b9c0: 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69  ual table defini
b9d0: 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64  tion) is defined
b9e0: 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
b9f0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
ba00: 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73  ing structure, s
ba10: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
ba20: 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20  ite3.aModule.** 
ba30: 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73  hash table..*/.s
ba40: 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20  truct Module {. 
ba50: 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
ba60: 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20  odule *pModule; 
ba70: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63        /* Callbac
ba80: 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20  k pointers */.  
ba90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
baa0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bab0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73       /* Name pas
bac0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
bad0: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
bae0: 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20   *pAux;         
baf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb00: 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20   /* pAux passed 
bb10: 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
bb20: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
bb30: 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29  Destroy)(void *)
bb40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
bb50: 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f  Module destructo
bb60: 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 3b  r function */.};
bb70: 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ../*.** informat
bb80: 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
bb90: 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20  olumn of an SQL 
bba0: 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e  table is held in
bbb0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
bbc0: 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
bbd0: 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  e..*/.struct Col
bbe0: 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  umn {.  char *zN
bbf0: 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ame;     /* Name
bc00: 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
bc10: 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
bc20: 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
bc30: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
bc40: 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
bc50: 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 4f  *zDflt;     /* O
bc60: 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20  riginal text of 
bc70: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
bc80: 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 79  e */.  char *zTy
bc90: 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74 61 20  pe;     /* Data 
bca0: 74 79 70 65 20 66 6f 72 20 74 68 69 73 20 63 6f  type for this co
bcb0: 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
bcc0: 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
bcd0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
bce0: 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
bcf0: 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
bd00: 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
bd10: 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
bd20: 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
bd30: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
bd40: 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
bd50: 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
bd60: 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
bd70: 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
bd80: 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
bd90: 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
bda0: 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20 63 6f   size of this co
bdb0: 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20 2a 2f  lumn.  INT==1 */
bdc0: 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
bdd0: 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
bde0: 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
bdf0: 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
be00: 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
be10: 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
be20: 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
be30: 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
be40: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
be50: 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
be60: 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
be70: 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
be80: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
be90: 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
bea0: 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
beb0: 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
bec0: 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
bed0: 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
bee0: 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
bef0: 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
bf00: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
bf10: 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
bf20: 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
bf30: 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
bf40: 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
bf50: 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
bf60: 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
bf70: 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
bf80: 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
bf90: 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
bfa0: 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
bfb0: 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
bfc0: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
bfd0: 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
bfe0: 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
bff0: 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
c000: 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
c010: 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
c020: 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
c030: 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
c040: 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
c050: 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
c060: 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
c070: 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
c080: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
c090: 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
c0a0: 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c0c0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
c0d0: 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
c0e0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
c0f0: 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
c100: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
c110: 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
c120: 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
c130: 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
c140: 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
c150: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
c160: 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
c170: 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
c180: 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
c190: 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
c1a0: 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
c1b0: 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
c1c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
c1d0: 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
c1e0: 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
c1f0: 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
c200: 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
c210: 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
c220: 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
c230: 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  der */../*.** Co
c240: 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
c250: 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
c260: 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
c270: 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
c280: 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
c290: 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
c2a0: 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
c2b0: 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
c2c0: 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
c2d0: 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
c2e0: 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
c2f0: 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
c300: 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
c310: 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
c320: 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42 75 74  ely.  .**.** But
c330: 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61   rather than sta
c340: 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20  rt with 0 or 1, 
c350: 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 61  we begin with 'a
c360: 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a  '.  That way,.**
c370: 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61   when multiple a
c380: 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72  ffinity types ar
c390: 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69  e concatenated i
c3a0: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64  nto a string and
c3b0: 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20  .** used as the 
c3c0: 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79  P4 operand, they
c3d0: 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65   will be more re
c3e0: 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f  adable..**.** No
c3f0: 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65  te also that the
c400: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61   numeric types a
c410: 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74  re grouped toget
c420: 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74  her so that test
c430: 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d  ing.** for a num
c440: 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73  eric type is a s
c450: 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e  ingle comparison
c460: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
c470: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
c480: 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'a'.#define SQL
c490: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20 20 20  ITE_AFF_NONE    
c4a0: 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'b'.#define SQL
c4b0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
c4c0: 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'c'.#define SQL
c4d0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
c4e0: 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'd'.#define SQL
c4f0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
c500: 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'e'..#define sq
c510: 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
c520: 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
c530: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
c540: 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
c550: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
c560: 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
c570: 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
c580: 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
c590: 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 20 0a  ffinity value. .
c5a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
c5b0: 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
c5c0: 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x67../*.** Addit
c5d0: 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
c5e0: 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
c5f0: 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
c600: 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
c610: 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
c620: 69 74 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ity..*/.#define 
c630: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
c640: 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a 75 6d  L   0x08  /* jum
c650: 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
c660: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
c670: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
c680: 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 31 30  TOREP2      0x10
c690: 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
c6a0: 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
c6b0: 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
c6c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
c6d0: 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
c6e0: 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
c6f0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
c700: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
c710: 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
c720: 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
c730: 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
c740: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
c750: 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  hema. .**.** If 
c760: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
c770: 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74  ema is shared, t
c780: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65  hen there is one
c790: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
c7a0: 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66  s.** structure f
c7b0: 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65  or each database
c7c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c   connection (sql
c7d0: 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73  ite3*) that uses
c7e0: 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73   the shared.** s
c7f0: 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62  chema. This is b
c800: 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61  ecause each data
c810: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
c820: 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e  requires its own
c830: 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61   unique.** insta
c840: 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74  nce of the sqlit
c850: 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
c860: 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  used to access t
c870: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
c880: 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74   .** implementat
c890: 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
c8a0: 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
c8b0: 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
c8c0: 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62 61 73  ween .** databas
c8d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
c8e0: 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
c8f0: 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
c900: 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  ry database .** 
c910: 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
c920: 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
c930: 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
c940: 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
c950: 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
c960: 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
c970: 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
c980: 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
c990: 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
c9a0: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
c9b0: 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
c9c0: 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
c9d0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
c9e0: 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
c9f0: 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
ca00: 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
ca10: 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
ca20: 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20 0a 2a  s real tables .*
ca30: 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74  * within the dat
ca40: 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74  abase. So that t
ca50: 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61  hey appear as pa
ca60: 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72  rt of the caller
ca70: 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  s .** transactio
ca80: 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
ca90: 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
caa0: 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
cab0: 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f 6e 6e  atabase .** conn
cac0: 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
cad0: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
cae0: 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
caf0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
cb00: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
cb10: 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
cb20: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
cb30: 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
cb40: 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
cb50: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
cb60: 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
cb70: 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
cb80: 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
cb90: 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
cba0: 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
cbb0: 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
cbc0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
cbd0: 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
cbe0: 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
cbf0: 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
cc00: 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
cc10: 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
cc20: 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
cc30: 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
cc40: 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
cc50: 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
cc60: 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
cc70: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
cc80: 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
cc90: 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
cca0: 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
ccb0: 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
ccc0: 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
ccd0: 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
cce0: 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
ccf0: 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
cd00: 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
cd10: 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
cd20: 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
cd30: 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
cd40: 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
cd50: 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
cd60: 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a 20 64  ts are not .** d
cd70: 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
cd80: 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
cd90: 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
cda0: 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a 2a 2a  sconnect()ed .**
cdb0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e   immediately. In
cdc0: 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20  stead, they are 
cdd0: 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54  moved from the T
cde0: 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73  able.pVTable lis
cdf0: 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20  t to.** another 
ce00: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
ce10: 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65  ed by the sqlite
ce20: 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65  3.pDisconnect me
ce30: 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63  mber of the.** c
ce40: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
ce50: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20  ite3 structure. 
ce60: 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65  They are then de
ce70: 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63  leted/xDisconnec
ce80: 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  ted .** next tim
ce90: 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
cea0: 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
ceb0: 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
cec0: 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
ced0: 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
cee0: 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
cef0: 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
cf00: 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
cf10: 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
cf20: 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
cf30: 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
cf40: 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
cf50: 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
cf60: 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
cf70: 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
cf80: 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
cf90: 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
cfa0: 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
cfb0: 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
cfc0: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
cfd0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
cfe0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
cff0: 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
d000: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
d010: 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
d020: 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62  by .** sqlite3Db
d030: 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
d040: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
d050: 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
d060: 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a 2a 2a  VTable.db as .**
d070: 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
d080: 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
d090: 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
d0a0: 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
d0b0: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
d0c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
d0d0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
d0e0: 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
d0f0: 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
d100: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
d110: 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
d120: 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
d130: 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
d140: 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
d150: 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
d160: 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
d170: 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
d180: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
d190: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
d1a0: 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
d1b0: 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
d1c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
d1d0: 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
d1e0: 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
d1f0: 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
d200: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
d210: 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
d220: 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
d230: 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
d240: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d250: 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
d260: 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
d270: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  */.};../*.** Eac
d280: 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 72  h SQL table is r
d290: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
d2a0: 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73 74 61  mory by an insta
d2b0: 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20 66 6f  nce of the.** fo
d2c0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
d2d0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 7a  e..**.** Table.z
d2e0: 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61 6d 65  Name is the name
d2f0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20   of the table.  
d300: 54 68 65 20 63 61 73 65 20 6f 66 20 74 68 65 20  The case of the 
d310: 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52 45 41  original.** CREA
d320: 54 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65  TE TABLE stateme
d330: 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20 62 75  nt is stored, bu
d340: 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20 73 69  t case is not si
d350: 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a 2a 2a  gnificant for.**
d360: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a 2a 2a   comparisons..**
d370: 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c 20 69  .** Table.nCol i
d380: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
d390: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
d3a0: 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e 61 43  table.  Table.aC
d3b0: 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  ol is a.** point
d3c0: 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79 20 6f  er to an array o
d3d0: 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63 74 75  f Column structu
d3e0: 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65 61 63  res, one for eac
d3f0: 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20  h column..**.** 
d400: 49 66 20 74 68 65 20 74 61 62 6c 65 20 68 61 73  If the table has
d410: 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52 49 4d   an INTEGER PRIM
d420: 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20 54 61  ARY KEY, then Ta
d430: 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74 68 65  ble.iPKey is the
d440: 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74 68 65   index of.** the
d450: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69 73 20   column that is 
d460: 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74 68 65  that key.   Othe
d470: 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50 4b 65  rwise Table.iPKe
d480: 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e 20 20  y is negative.  
d490: 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  Note.** that the
d4a0: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
d4b0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d 75 73   PRIMARY KEY mus
d4c0: 74 20 62 65 20 49 4e 54 45 47 45 52 20 66 6f 72  t be INTEGER for
d4d0: 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f 0a 2a   this field to.*
d4e0: 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20 49 4e  * be set.  An IN
d4f0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
d500: 59 20 69 73 20 75 73 65 64 20 61 73 20 74 68 65  Y is used as the
d510: 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63 68 20   rowid for each 
d520: 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20 74 61  row of.** the ta
d530: 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62 6c 65  ble.  If a table
d540: 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45 52 20   has no INTEGER 
d550: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65  PRIMARY KEY, the
d560: 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  n a random rowid
d570: 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74 65 64  .** is generated
d580: 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 6f 66   for each row of
d590: 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54 46 5f   the table.  TF_
d5a0: 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 69 73  HasPrimaryKey is
d5b0: 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65 20 74   set if.** the t
d5c0: 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50 52 49  able has any PRI
d5d0: 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45 47 45  MARY KEY, INTEGE
d5e0: 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65 2e 0a  R or otherwise..
d5f0: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e 75 6d  **.** Table.tnum
d600: 20 69 73 20 74 68 65 20 70 61 67 65 20 6e 75 6d   is the page num
d610: 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f 6f 74  ber for the root
d620: 20 42 54 72 65 65 20 70 61 67 65 20 6f 66 20 74   BTree page of t
d630: 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68 65 0a  he table in the.
d640: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
d650: 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44 62 20  .  If Table.iDb 
d660: 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
d670: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
d680: 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20 69 6e  le backend.** in
d690: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e 20 20   sqlite.aDb[].  
d6a0: 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d 61 69  0 is for the mai
d6b0: 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 31  n database and 1
d6c0: 20 69 73 20 66 6f 72 20 74 68 65 20 66 69 6c 65   is for the file
d6d0: 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73 20 74   that.** holds t
d6e0: 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 20  emporary tables 
d6f0: 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20 49 66  and indices.  If
d700: 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 69 73   TF_Ephemeral is
d710: 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74 68 65   set.** then the
d720: 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72 65 64   table is stored
d730: 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61 74 20   in a file that 
d740: 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  is automatically
d750: 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68 65 6e   deleted.** when
d760: 20 74 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   the VDBE cursor
d770: 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 69 73   to the table is
d780: 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74 68 69   closed.  In thi
d790: 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74 6e 75  s case Table.tnu
d7a0: 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56 44 42  m .** refers VDB
d7b0: 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  E cursor number 
d7c0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 74  that holds the t
d7d0: 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74 20 74  able open, not t
d7e0: 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  o the root.** pa
d7f0: 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72 61 6e  ge number.  Tran
d800: 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61 72 65  sient tables are
d810: 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68   used to hold th
d820: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 0a 2a  e results of a.*
d830: 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68 61 74  * sub-query that
d840: 20 61 70 70 65 61 72 73 20 69 6e 73 74 65 61 64   appears instead
d850: 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
d860: 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46 52 4f   name in the FRO
d870: 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f 66 20  M clause .** of 
d880: 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
d890: 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61  nt..*/.struct Ta
d8a0: 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ble {.  char *zN
d8b0: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ame;         /* 
d8c0: 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
d8d0: 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43  e or view */.  C
d8e0: 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20  olumn *aCol;    
d8f0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
d900: 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
d910: 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
d920: 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f  *pIndex;       /
d930: 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e  * List of SQL in
d940: 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61  dexes on this ta
d950: 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ble. */.  Select
d960: 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
d970: 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65  * NULL for table
d980: 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65  s.  Points to de
d990: 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69  finition if a vi
d9a0: 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ew. */.  FKey *p
d9b0: 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  FKey;         /*
d9c0: 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
d9d0: 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  all foreign keys
d9e0: 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a   in this table *
d9f0: 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66  /.  char *zColAf
da00: 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69  f;       /* Stri
da10: 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
da20: 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
da30: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66 6e 64   column */.#ifnd
da40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
da50: 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73 74 20  HECK.  ExprList 
da60: 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
da70: 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
da80: 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  ints */.#endif. 
da90: 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74   tRowcnt nRowEst
daa0: 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74  ;     /* Estimat
dab0: 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65  ed rows in table
dac0: 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73   - from sqlite_s
dad0: 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20  tat1 table */.  
dae0: 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
daf0: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
db00: 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68 69 73  ee node for this
db10: 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f 74 65   table (see note
db20: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 31 36   above) */.  i16
db30: 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
db40: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
db50: 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
db60: 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70 72 69  PKey] as the pri
db70: 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20 69 31  mary key */.  i1
db80: 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
db90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
dba0: 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
dbb0: 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36 20 6e  table */.  u16 n
dbc0: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
dbd0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69  /* Number of poi
dbe0: 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54 61  nters to this Ta
dbf0: 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
dc00: 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a  szTabRow;     /*
dc10: 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20   Estimated size 
dc20: 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f  of each table ro
dc30: 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  w in bytes */.  
dc40: 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
dc50: 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
dc60: 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
dc70: 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
dc80: 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
dc90: 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
dca0: 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
dcb0: 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
dcc0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
dcd0: 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
dce0: 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
dcf0: 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
dd00: 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
dd10: 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
dd20: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
dd30: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
dd40: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
dd50: 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
dd60: 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
dd70: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
dd80: 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
dd90: 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
dda0: 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65 78 74  uleArg;  /* Text
ddb0: 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65 20 61   of all module a
ddc0: 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f 64 75  rgs. [0] is modu
ddd0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56 54 61  le name */.  VTa
dde0: 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
ddf0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
de00: 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
de10: 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
de20: 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
de30: 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
de40: 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
de50: 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
de60: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
de70: 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
de80: 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
de90: 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
dea0: 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
deb0: 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
dec0: 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
ded0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
dee0: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
def0: 54 61 62 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  Tabe.tabFlags..*
df00: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
df10: 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
df20: 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
df30: 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
df40: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
df50: 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
df60: 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
df70: 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
df80: 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
df90: 61 72 79 4b 65 79 20 20 20 30 78 30 34 20 20 20  aryKey   0x04   
dfa0: 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
dfb0: 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
dfc0: 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
dfd0: 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38 20 20  crement   0x08  
dfe0: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
dff0: 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
e000: 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
e010: 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61 6c 20  fine TF_Virtual 
e020: 20 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20          0x10    
e030: 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61 6c 20  /* Is a virtual 
e040: 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
e050: 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
e060: 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 4e      0x20    /* N
e070: 6f 20 72 6f 77 69 64 20 75 73 65 64 2e 20 50 52  o rowid used. PR
e080: 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
e090: 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20   key */.../*.** 
e0a0: 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
e0b0: 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
e0c0: 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
e0d0: 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
e0e0: 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
e0f0: 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
e100: 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
e110: 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
e120: 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
e130: 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
e140: 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
e150: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e160: 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
e170: 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
e180: 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
e190: 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
e1a0: 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
e1b0: 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
e1c0: 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
e1d0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
e1e0: 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
e1f0: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
e200: 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
e210: 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
e220: 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
e230: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f   0.#endif../* Do
e240: 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
e250: 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
e260: 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
e270: 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
e280: 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
e290: 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a  tRowid)==0)../*.
e2a0: 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20  ** Each foreign 
e2b0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69  key constraint i
e2c0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
e2d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
e2e0: 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
e2f0: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73  A foreign key is
e300: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
e310: 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68   two tables.  Th
e320: 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69  e "from" table i
e330: 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74  s.** the table t
e340: 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
e350: 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
e360: 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73 20  se that creates 
e370: 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b  the foreign.** k
e380: 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61  ey.  The "to" ta
e390: 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c 65  ble is the table
e3a0: 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69   that is named i
e3b0: 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  n the REFERENCES
e3c0: 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73   clause..** Cons
e3d0: 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c  ider this exampl
e3e0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45  e:.**.**     CRE
e3f0: 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a  ATE TABLE ex1(.*
e400: 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47 45  *       a INTEGE
e410: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a  R PRIMARY KEY,.*
e420: 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47 45  *       b INTEGE
e430: 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31  R CONSTRAINT fk1
e440: 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32 28   REFERENCES ex2(
e450: 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a  x).**     );.**.
e460: 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b  ** For foreign k
e470: 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72  ey "fk1", the fr
e480: 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31  om-table is "ex1
e490: 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62  " and the to-tab
e4a0: 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 0a  le is "ex2"..**.
e4b0: 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
e4c0: 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
e4d0: 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
e4e0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
e4f0: 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
e500: 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
e510: 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
e520: 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
e530: 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
e540: 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
e550: 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
e560: 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
e570: 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
e580: 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
e590: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79  ..*/.struct FKey
e5a0: 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f   {.  Table *pFro
e5b0: 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  m;     /* Table 
e5c0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52  containing the R
e5d0: 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
e5e0: 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f   (aka: Child) */
e5f0: 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72  .  FKey *pNextFr
e600: 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 66 6f 72  om;  /* Next for
e610: 65 69 67 6e 20 6b 65 79 20 69 6e 20 70 46 72 6f  eign key in pFro
e620: 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f  m */.  char *zTo
e630: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  ;        /* Name
e640: 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74   of table that t
e650: 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f  he key points to
e660: 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a   (aka: Parent) *
e670: 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54  /.  FKey *pNextT
e680: 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 6f  o;    /* Next fo
e690: 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74 61 62  reign key on tab
e6a0: 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a 2f 0a  le named zTo */.
e6b0: 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
e6c0: 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
e6d0: 66 6f 72 65 69 67 6e 20 6b 65 79 20 6f 6e 20 74  foreign key on t
e6e0: 61 62 6c 65 20 6e 61 6d 65 64 20 7a 54 6f 20 2a  able named zTo *
e6f0: 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20  /.  int nCol;   
e700: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e710: 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
e720: 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45  is key */.  /* E
e730: 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37  V: R-30323-21917
e740: 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72   */.  u8 isDefer
e750: 72 65 64 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  red;    /* True 
e760: 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
e770: 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
e780: 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
e790: 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
e7a0: 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ];          /* O
e7b0: 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
e7c0: 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
e7d0: 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
e7e0: 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
e7f0: 67 67 65 72 5b 32 5d 3b 20 20 2f 2a 20 54 72 69  gger[2];  /* Tri
e800: 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
e810: 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
e820: 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
e830: 7b 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66  {  /* Mapping of
e840: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
e850: 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
e860: 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
e870: 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a  From;         /*
e880: 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e   Index of column
e890: 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20   in pFrom */.   
e8a0: 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20   char *zCol;    
e8b0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63      /* Name of c
e8c0: 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49  olumn in zTo.  I
e8d0: 66 20 30 20 75 73 65 20 50 52 49 4d 41 52 59 20  f 0 use PRIMARY 
e8e0: 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
e8f0: 31 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  1];        /* On
e900: 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
e910: 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 20   of nCol column 
e920: 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
e930: 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
e940: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
e950: 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
e960: 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
e970: 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
e980: 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
e990: 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
e9a0: 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
e9b0: 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
e9c0: 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
e9d0: 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
e9e0: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
e9f0: 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
ea00: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
ea10: 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
ea20: 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
ea30: 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
ea40: 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
ea50: 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
ea60: 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
ea70: 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
ea80: 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
ea90: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
eaa0: 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
eab0: 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
eac0: 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
ead0: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
eae0: 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
eaf0: 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
eb00: 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
eb10: 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
eb20: 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
eb30: 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
eb40: 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
eb50: 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
eb60: 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
eb70: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
eb80: 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
eb90: 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
eba0: 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
ebb0: 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
ebc0: 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
ebd0: 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
ebe0: 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
ebf0: 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
ec00: 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
ec10: 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
ec20: 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
ec30: 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
ec40: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
ec50: 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
ec60: 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
ec70: 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
ec80: 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
ec90: 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
eca0: 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
ecb0: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
ecc0: 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
ecd0: 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
ece0: 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
ecf0: 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
ed00: 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
ed10: 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
ed20: 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
ed30: 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
ed40: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
ed50: 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
ed60: 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
ed70: 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
ed80: 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
ed90: 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
eda0: 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
edb0: 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
edc0: 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
edd0: 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
ede0: 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
edf0: 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
ee00: 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
ee10: 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
ee20: 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
ee30: 65 79 2e 0a 2a 2a 20 0a 2a 2a 20 54 68 65 20 66  ey..** .** The f
ee40: 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
ee50: 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
ee60: 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
ee70: 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
ee80: 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
ee90: 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
eea0: 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
eeb0: 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
eec0: 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
eed0: 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
eee0: 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
eef0: 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
ef00: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
ef10: 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
ef20: 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
ef30: 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
ef40: 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
ef50: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
ef60: 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
ef70: 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
ef80: 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
ef90: 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
efa0: 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
efb0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
efc0: 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
efd0: 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
efe0: 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
eff0: 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
f000: 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
f010: 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
f020: 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
f030: 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
f040: 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
f050: 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
f060: 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
f070: 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
f080: 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
f090: 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
f0a0: 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
f0b0: 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
f0c0: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
f0d0: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
f0e0: 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
f0f0: 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
f100: 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
f110: 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
f120: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
f130: 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
f140: 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
f150: 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
f160: 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
f170: 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
f180: 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
f190: 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
f1a0: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
f1b0: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
f1c0: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
f1d0: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
f1e0: 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
f1f0: 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
f200: 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
f210: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
f220: 20 74 68 65 20 0a 2a 2a 20 63 6f 6d 70 61 72 69   the .** compari
f230: 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
f240: 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
f250: 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
f260: 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
f270: 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
f280: 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
f290: 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
f2a0: 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
f2b0: 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
f2c0: 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
f2d0: 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
f2e0: 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
f2f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
f300: 66 6f 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  fo {.  sqlite3 *
f310: 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
f320: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
f330: 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 65 6e  ction */.  u8 en
f340: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
f350: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
f360: 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
f370: 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
f380: 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
f390: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
f3a0: 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
f3b0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
f3c0: 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
f3d0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f3e0: 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
f3f0: 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
f400: 6d 6e 73 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  mns */.  u8 *aSo
f410: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
f420: 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
f430: 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
f440: 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
f450: 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
f460: 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
f470: 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
f480: 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
f490: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
f4a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f4b0: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e  ructure holds in
f4c0: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
f4d0: 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e 64 65  a.** single inde
f4e0: 78 20 72 65 63 6f 72 64 20 74 68 61 74 20 68 61  x record that ha
f4f0: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 70  s already been p
f500: 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
f510: 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76 61 6c  ndividual.** val
f520: 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63  ues..**.** A rec
f530: 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74  ord is an object
f540: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f   that contains o
f550: 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64  ne or more field
f560: 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65  s of data..** Re
f570: 63 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74  cords are used t
f580: 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74  o store the cont
f590: 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72  ent of a table r
f5a0: 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a  ow and to store.
f5b0: 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e  ** the key of an
f5c0: 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20   index.  A blob 
f5d0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65  encoding of a re
f5e0: 63 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20  cord is created 
f5f0: 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b  by.** the OP_Mak
f600: 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f  eRecord opcode o
f610: 66 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69  f the VDBE and i
f620: 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62  s disassembled b
f630: 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75  y the.** OP_Colu
f640: 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  mn opcode..**.**
f650: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
f660: 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 74  holds a record t
f670: 68 61 74 20 68 61 73 20 61 6c 72 65 61 64 79 20  hat has already 
f680: 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62 6c 65  been disassemble
f690: 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20 63 6f  d.** into its co
f6a0: 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c 64 73  nstituent fields
f6b0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61  ..*/.struct Unpa
f6c0: 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b  ckedRecord {.  K
f6d0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
f6e0: 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20  ;  /* Collation 
f6f0: 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69  and sort-order i
f700: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20  nformation */.  
f710: 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
f720: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
f730: 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
f740: 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c 61 67  m[] */.  u8 flag
f750: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
f760: 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e 67 73  Boolean settings
f770: 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e 2e 20  .  UNPACKED_... 
f780: 62 65 6c 6f 77 20 2a 2f 0a 20 20 4d 65 6d 20 2a  below */.  Mem *
f790: 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
f7a0: 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  * Values */.};..
f7b0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
f7c0: 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b 65 64  lues of Unpacked
f7d0: 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a 2f 0a  Record.flags.*/.
f7e0: 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b 45 44  #define UNPACKED
f7f0: 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20 20 30  _INCRKEY       0
f800: 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74 68 69  x01  /* Make thi
f810: 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c 6f 6e  s key an epsilon
f820: 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65 66 69   larger */.#defi
f830: 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52 45 46  ne UNPACKED_PREF
f840: 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32 20 20  IX_MATCH  0x02  
f850: 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61 74 63  /* A prefix matc
f860: 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  h is considered 
f870: 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  OK */../*.** Eac
f880: 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
f890: 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
f8a0: 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
f8b0: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
f8c0: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
f8d0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
f8e0: 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
f8f0: 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
f900: 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
f910: 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
f920: 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
f930: 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
f940: 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
f950: 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
f960: 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
f970: 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
f980: 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
f990: 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
f9a0: 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
f9b0: 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
f9c0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
f9d0: 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
f9e0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
f9f0: 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
fa00: 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
fa10: 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
fa20: 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
fa30: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
fa40: 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
fa50: 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
fa60: 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
fa70: 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
fa80: 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
fa90: 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
faa0: 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
fab0: 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
fac0: 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
fad0: 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
fae0: 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20 66 69  cause the .** fi
faf0: 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  rst column to be
fb00: 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61   indexed (c3) ha
fb10: 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20  s an index of 2 
fb20: 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a  in Ex1.aCol[]..*
fb30: 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c  * The second col
fb40: 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
fb50: 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e  d (c1) has an in
fb60: 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45  dex of 0 in.** E
fb70: 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65  x1.aCol[], hence
fb80: 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d   Ex2.aiColumn[1]
fb90: 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ==0..**.** The I
fba0: 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65  ndex.onError fie
fbb0: 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68  ld determines wh
fbc0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
fbd0: 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73   indexed columns
fbe0: 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71  .** must be uniq
fbf0: 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64  ue and what to d
fc00: 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f  o if they are no
fc10: 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f  t.  When Index.o
fc20: 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a  nError=OE_None,.
fc30: 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73  ** it means this
fc40: 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65   is not a unique
fc50: 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69   index.  Otherwi
fc60: 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75  se it is a uniqu
fc70: 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74  e index.** and t
fc80: 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65  he value of Inde
fc90: 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61  x.onError indica
fca0: 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e  te the which con
fcb0: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
fcc0: 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74   .** algorithm t
fcd0: 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
fce0: 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
fcf0: 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
fd00: 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
fd10: 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  lement..*/.struc
fd20: 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
fd30: 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
fd40: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
fd50: 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
fd60: 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
fd70: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
fd80: 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
fd90: 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
fda0: 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
fdb0: 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
fdc0: 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 72 6f  st;       /* Fro
fdd0: 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
fde0: 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
fdf0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
fe00: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
fe10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
fe20: 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
fe30: 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
fe40: 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
fe50: 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
fe60: 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
fe70: 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
fe80: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
fe90: 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
fea0: 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
feb0: 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
fec0: 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
fed0: 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
fee0: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
fef0: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
ff00: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
ff10: 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
ff20: 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
ff30: 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
ff40: 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
ff50: 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
ff60: 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b    char **azColl;
ff70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
ff80: 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
ff90: 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
ffa0: 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
ffb0: 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
ffc0: 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
ffd0: 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
ffe0: 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
fff0: 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
10000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
10010 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
10020 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
10030 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
10040 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
10050 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
10060 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
10070 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
10080 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
10090 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
100a0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
100b0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
100c0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
100d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
100e0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
100f0 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
10100 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
10110 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
10120 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
10130 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
10140 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
10150 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 61 75 74  /.  unsigned aut
10160 6f 49 6e 64 65 78 3a 32 3b 20 20 20 20 2f 2a 20  oIndex:2;    /* 
10170 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
10180 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
10190 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
101a0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
101b0 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
101c0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
101d0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
101e0 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
101f0 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
10200 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
10210 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
10220 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
10230 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
10240 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
10250 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
10260 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
10270 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
10280 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
10290 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
102a0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
102b0 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
102c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
102d0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
102e0 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
102f0 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
10300 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10310 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
10320 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
10330 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
10340 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
10350 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
10360 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
10370 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
10380 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
10390 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
103a0 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
103b0 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
103c0 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
103d0 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
103e0 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
103f0 74 20 6b 65 79 20 2a 2f 0a 23 65 6e 64 69 66 0a  t key */.#endif.
10400 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  };../*.** Each s
10410 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
10420 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
10430 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
10440 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
10450 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75  .** using a stru
10460 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79  cture of this ty
10470 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e  pe.  See documen
10480 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f  tation at the to
10490 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c  p of the.** anal
104a0 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c  yze.c source fil
104b0 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
104c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
104d0 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d  .struct IndexSam
104e0 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b  ple {.  void *p;
104f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
10500 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20  nter to sampled 
10510 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
10520 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
10530 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20   Size of record 
10540 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52  in bytes */.  tR
10550 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20  owcnt *anEq;    
10560 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
10570 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65  f rows where the
10580 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73   key equals this
10590 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
105a0 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f  wcnt *anLt;    /
105b0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
105c0 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20   rows where key 
105d0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  is less than thi
105e0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
105f0 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20  owcnt *anDLt;   
10600 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
10610 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20  f distinct keys 
10620 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73  less than this s
10630 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ample */.};../*.
10640 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f  ** Each token co
10650 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20  ming out of the 
10660 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74  lexer is an inst
10670 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20  ance of.** this 
10680 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65  structure.  Toke
10690 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64  ns are also used
106a0 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65   as part of an e
106b0 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  xpression..**.**
106c0 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a   Note if Token.z
106d0 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64  ==0 then Token.d
106e0 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61  yn and Token.n a
106f0 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64  re undefined and
10700 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20  .** may contain 
10710 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20  random values.  
10720 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20  Do not make any 
10730 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75  assumptions abou
10740 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61  t Token.dyn.** a
10750 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20  nd Token.n when 
10760 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73  Token.z==0..*/.s
10770 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20  truct Token {.  
10780 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20  const char *z;  
10790 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
107a0 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55  e token.  Not NU
107b0 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a  LL-terminated! *
107c0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  /.  unsigned int
107d0 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72   n;    /* Number
107e0 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69   of characters i
107f0 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a  n this token */.
10800 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
10810 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
10820 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
10830 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
10840 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
10850 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45  ** code for a SE
10860 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69  LECT that contai
10870 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
10880 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  ctions..**.** If
10890 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47   Expr.op==TK_AGG
108a0 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47  _COLUMN or TK_AG
108b0 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20  G_FUNCTION then 
108c0 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73  Expr.pAggInfo is
108d0 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f   a.** pointer to
108e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
108f0 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75    The Expr.iColu
10900 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20  mn field is the 
10910 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49  index in.** AggI
10920 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67  nfo.aCol[] or Ag
10930 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66  gInfo.aFunc[] of
10940 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65   information nee
10950 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a  ded to generate.
10960 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74  ** code for that
10970 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67   node..**.** Agg
10980 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e  Info.pGroupBy an
10990 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e  d AggInfo.aFunc.
109a0 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66  pExpr point to f
109b0 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65  ields within the
109c0 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c  .** original Sel
109d0 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68  ect structure th
109e0 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65  at describes the
109f0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
10a00 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65  t.  These.** fie
10a10 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20  lds do not need 
10a20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e  to be freed when
10a30 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
10a40 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74  e AggInfo struct
10a50 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ure..*/.struct A
10a60 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69  ggInfo {.  u8 di
10a70 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20  rectMode;       
10a80 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e     /* Direct ren
10a90 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e  dering mode mean
10aa0 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65  s take data dire
10ab0 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20  ctly.           
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10ad0 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61  * from source ta
10ae0 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e  bles rather than
10af0 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f   from accumulato
10b00 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f  rs */.  u8 useSo
10b10 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
10b20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64  /* In direct mod
10b30 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65  e, reference the
10b40 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72   sorting index r
10b50 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20  ather.          
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72  ** than the sour
10b80 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  ce table */.  in
10b90 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  t sortingIdx;   
10ba0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
10bb0 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
10bc0 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
10bd0 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50   int sortingIdxP
10be0 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73  Tab;     /* Curs
10bf0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65  or number of pse
10c00 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69  udo-table */.  i
10c10 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d  nt nSortingColum
10c20 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  n;     /* Number
10c30 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
10c40 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
10c50 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
10c60 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a  pGroupBy;     /*
10c70 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c   The group by cl
10c80 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74  ause */.  struct
10c90 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20   AggInfo_col {  
10ca0 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f    /* For each co
10cb0 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75  lumn used in sou
10cc0 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20  rce tables */.  
10cd0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
10ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f             /* So
10cf0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
10d00 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
10d10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
10d20 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
10d30 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
10d40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75  */.    int iColu
10d50 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
10d60 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
10d70 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72   within the sour
10d80 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
10d90 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d  int iSorterColum
10da0 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  n;       /* Colu
10db0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  mn number in the
10dc0 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
10dd0 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10df0 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
10e00 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
10e10 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
10e20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20    Expr *pExpr;  
10e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
10e40 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65  e original expre
10e50 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43  ssion */.  } *aC
10e60 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d  ol;.  int nColum
10e70 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
10e80 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20   Number of used 
10e90 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b  entries in aCol[
10ea0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75  ] */.  int nAccu
10eb0 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f  mulator;       /
10ec0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
10ed0 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68  mns that show th
10ee0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74  rough to the out
10ef0 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20  put..           
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
10f10 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c  * Additional col
10f20 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e  umns are used on
10f30 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73  ly as parameters
10f40 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20   to.            
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
10f60 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
10f70 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74  ions */.  struct
10f80 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20   AggInfo_func { 
10f90 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67    /* For each ag
10fa0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
10fb0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
10fc0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
10fd0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65   /* Expression e
10fe0 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63  ncoding the func
10ff0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63  tion */.    Func
11000 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20  Def *pFunc;     
11010 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72       /* The aggr
11020 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69  egate function i
11030 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f  mplementation */
11040 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11060 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
11070 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
11080 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
11090 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20   int iDistinct; 
110a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68            /* Eph
110b0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65  emeral table use
110c0 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53  d to enforce DIS
110d0 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46  TINCT */.  } *aF
110e0 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63  unc;.  int nFunc
110f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
11100 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
11110 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a  ies in aFunc[] *
11120 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
11130 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69  datatype ynVar i
11140 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67  s a signed integ
11150 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69  er, either 16-bi
11160 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20  t or 32-bit..** 
11170 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36  Usually it is 16
11180 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53  -bits.  But if S
11190 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
111a0 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65  LE_NUMBER is gre
111b0 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37  ater.** than 327
111c0 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61  67 we have to ma
111d0 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31  ke it 32-bit.  1
111e0 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72  6-bit is preferr
111f0 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74  ed because.** it
11200 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72   uses less memor
11210 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62  y in the Expr ob
11220 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61  ject, which is a
11230 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72   big memory user
11240 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77  .** in systems w
11250 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70  ith lots of prep
11260 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e  ared statements.
11270 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63    And few applic
11280 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d  ations.** need m
11290 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31  ore than about 1
112a0 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65  0 or 20 variable
112b0 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74  s.  But some ext
112c0 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a  reme users want.
112d0 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61  ** to have prepa
112e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
112f0 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76  ith over 32767 v
11300 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f  ariables, and fo
11310 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70  r them.** the op
11320 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
11330 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  e (at compile-ti
11340 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  me)..*/.#if SQLI
11350 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
11360 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79  NUMBER<=32767.ty
11370 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b  pedef i16 ynVar;
11380 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69  .#else.typedef i
11390 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66  nt ynVar;.#endif
113a0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64  ../*.** Each nod
113b0 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  e of an expressi
113c0 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20  on in the parse 
113d0 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61  tree is an insta
113e0 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
113f0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20  tructure..**.** 
11400 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f  Expr.op is the o
11410 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67  pcode. The integ
11420 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20  er parser token 
11430 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64  codes are reused
11440 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68  .** as opcodes h
11450 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65  ere. For example
11460 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66  , the parser def
11470 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65  ines TK_GE to be
11480 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63   an integer.** c
11490 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67  ode representing
114a0 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74   the ">=" operat
114b0 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e  or. This same in
114c0 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65  teger code is re
114d0 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65  used.** to repre
114e0 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72  sent the greater
114f0 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74  -than-or-equal-t
11500 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  o operator in th
11510 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20  e expression.** 
11520 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tree..**.** If t
11530 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
11540 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20   an SQL literal 
11550 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f  (TK_INTEGER, TK_
11560 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20  FLOAT, TK_BLOB, 
11570 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
11580 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
11590 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
115a0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
115b0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
115c0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
115d0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
115e0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
115f0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
11600 69 6e 73 20 74 68 65 20 0a 2a 2a 20 76 61 72 69  ins the .** vari
11610 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
11620 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
11630 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
11640 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
11650 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
11660 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
11670 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
11680 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
11690 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
116a0 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
116b0 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
116c0 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
116d0 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
116e0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
116f0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
11700 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
11710 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
11720 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
11730 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
11740 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
11750 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
11760 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
11770 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
11780 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
11790 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
117a0 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
117b0 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
117c0 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
117d0 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
117e0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
117f0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
11800 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
11810 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
11820 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
11830 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
11840 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
11850 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
11860 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
11870 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
11880 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
11890 20 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a   .** valid..**.*
118a0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
118b0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
118c0 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
118d0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
118e0 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
118f0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
11900 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
11910 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
11920 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
11930 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
11940 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
11950 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
11960 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
11970 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
11980 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
11990 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
119a0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
119b0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
119c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
119d0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
119e0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
119f0 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
11a00 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
11a10 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
11a20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
11a30 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
11a40 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
11a50 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
11a60 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
11a70 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
11a80 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
11a90 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
11aa0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
11ab0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
11ac0 74 69 6f 6e 20 6d 61 72 6b 20 0a 2a 2a 20 63 68  tion mark .** ch
11ad0 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
11ae0 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
11af0 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
11b00 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
11b10 69 6e 64 65 78 20 0a 2a 2a 20 6e 75 6d 62 65 72  index .** number
11b20 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
11b30 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
11b40 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
11b50 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
11b60 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
11b70 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
11b80 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
11b90 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
11ba0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
11bb0 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
11bc0 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
11bd0 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
11be0 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
11bf0 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
11c00 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
11c10 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
11c20 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
11c30 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
11c40 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
11c50 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
11c60 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
11c70 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
11c80 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
11c90 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
11ca0 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
11cb0 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
11cc0 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
11cd0 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
11ce0 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
11cf0 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
11d00 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
11d10 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
11d20 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
11d30 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
11d40 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
11d50 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
11d60 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
11d70 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
11d80 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
11d90 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
11da0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
11db0 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
11dc0 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
11dd0 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
11de0 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
11df0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
11e00 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
11e10 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
11e20 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
11e30 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
11e40 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
11e50 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
11e60 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
11e70 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
11e80 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
11e90 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
11ea0 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
11eb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
11ec0 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
11ed0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
11ee0 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
11ef0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
11f00 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
11f10 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
11f20 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
11f30 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
11f40 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
11f50 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
11f60 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
11f70 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
11f80 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
11f90 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
11fa0 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
11fb0 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
11fc0 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
11fd0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
11fe0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
11ff0 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
12000 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
12010 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
12020 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
12030 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
12040 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
12050 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12070 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
12080 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
12090 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
120a0 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
120b0 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
120c0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
120d0 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
120e0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12100 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
12110 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
12120 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
12130 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
12140 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
12150 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
12160 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
12170 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
12180 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
12190 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
121a0 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
121b0 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
121c0 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
121d0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
121e0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
121f0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
12200 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
12210 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
12220 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
12230 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
12240 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
12250 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
12260 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
12270 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
12280 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
12290 20 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   .  ************
122a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
122b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
122c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
122d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
122e0 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
122f0 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
12300 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
12310 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
12320 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
12330 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
12340 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
12350 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
12360 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
12370 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
12380 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
12390 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
123a0 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
123b0 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
123c0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
123d0 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
123e0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
123f0 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
12400 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
12410 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
12420 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
12430 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
12440 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
12450 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
12460 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
12470 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
12480 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
12490 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
124a0 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
124b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
124e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
124f0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
12500 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
12510 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
12520 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
12530 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
12540 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
12550 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
12560 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
12570 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
12580 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
12590 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
125a0 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
125c0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
125d0 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
12600 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
12610 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
12640 20 20 31 30 30 30 20 74 69 6d 65 73 20 6c 69 6b    1000 times lik
12650 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56  elihood */.  ynV
12660 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  ar iColumn;     
12670 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      /* TK_COLUMN
12680 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20  : column index. 
12690 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20   -1 for rowid.. 
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126b0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41          ** TK_VA
126c0 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65  RIABLE: variable
126d0 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20   number (always 
126e0 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69 31 36 20  >= 1). */.  i16 
126f0 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  iAgg;           
12700 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72     /* Which entr
12710 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61  y in pAggInfo->a
12720 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63  Col[] or ->aFunc
12730 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67  [] */.  i16 iRig
12740 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f  htJoinTable;   /
12750 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  * If EP_FromJoin
12760 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c  , the right tabl
12770 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  e of the join */
12780 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20  .  u8 op2;      
12790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
127a0 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e  REGISTER: origin
127b0 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
127c0 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
127e0 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
127f0 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
12800 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
12830 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
12840 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
12850 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
12860 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
12870 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
12880 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
12890 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
128a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
128b0 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20  e for TK_COLUMN 
128c0 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a  expressions. */.
128d0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
128e0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
128f0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
12900 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
12910 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
12920 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
12930 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
12940 69 67 69 6e 61 74 65 64 20 69 6e 20 4f 4e 20 6f  iginated in ON o
12950 72 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  r USING clause o
12960 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  f a join */.#def
12970 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
12980 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
12990 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
129a0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
129b0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
129c0 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
129d0 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
129e0 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
129f0 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
12a00 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
12a10 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
12a20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
12a30 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
12a40 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
12a50 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
12a60 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
12a70 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
12a80 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
12a90 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
12aa0 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
12ab0 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
12ac0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
12ad0 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
12ae0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
12af0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
12b00 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
12b10 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
12b20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
12b30 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
12b40 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
12b50 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
12b60 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
12b70 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
12b80 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
12b90 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
12ba0 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
12bb0 70 65 61 72 74 6f 72 20 2a 2f 0a 23 64 65 66 69  peartor */.#defi
12bc0 6e 65 20 45 50 5f 46 69 78 65 64 44 65 73 74 20  ne EP_FixedDest 
12bd0 30 78 30 30 30 32 30 30 20 2f 2a 20 52 65 73 75  0x000200 /* Resu
12be0 6c 74 20 6e 65 65 64 65 64 20 69 6e 20 61 20 73  lt needed in a s
12bf0 70 65 63 69 66 69 63 20 72 65 67 69 73 74 65 72  pecific register
12c00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
12c10 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30  ntValue  0x00040
12c20 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c  0 /* Integer val
12c30 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
12c40 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
12c50 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
12c60 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70   0x000800 /* x.p
12c70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
12c80 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
12c90 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e  st is) */.#defin
12ca0 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30  e EP_Skip      0
12cb0 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41  x001000 /* COLLA
12cc0 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b  TE, AS, or UNLIK
12cd0 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ELY */.#define E
12ce0 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30  P_Reduced   0x00
12cf0 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  2000 /* Expr str
12d00 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44  uct EXPR_REDUCED
12d10 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
12d20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
12d30 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30  kenOnly 0x004000
12d40 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
12d50 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
12d60 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
12d70 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
12d80 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f  ic    0x008000 /
12d90 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
12da0 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
12db0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
12dc0 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b  define EP_MemTok
12dd0 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20  en  0x010000 /* 
12de0 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
12df0 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
12e00 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
12e10 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32  P_NoReduce  0x02
12e20 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  0000 /* Cannot E
12e30 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
12e40 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69  is Expr */.#defi
12e50 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20  ne EP_Unlikely  
12e60 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69  0x040000 /* unli
12e70 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69  kely() or likeli
12e80 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  hood() function 
12e90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
12ea0 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
12eb0 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
12ec0 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
12ed0 6e 20 74 68 65 20 0a 2a 2a 20 45 78 70 72 2e 66  n the .** Expr.f
12ee0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
12ef0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72  define ExprHasPr
12f00 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
12f10 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
12f20 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78  )!=0).#define Ex
12f30 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79  prHasAllProperty
12f40 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c  (E,P)  (((E)->fl
12f50 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
12f60 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72  define ExprSetPr
12f70 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20  operty(E,P)     
12f80 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
12f90 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61  #define ExprClea
12fa0 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  rProperty(E,P)  
12fb0 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50   (E)->flags&=~(P
12fc0 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65  )../* The ExprSe
12fd0 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d  tVVAProperty() m
12fe0 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72  acro is used for
12ff0 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56   Verification, V
13000 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e  alidation,.** an
13010 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20  d Accreditation 
13020 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20  only.  It works 
13030 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70  like ExprSetProp
13040 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56  erty() during VV
13050 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62  A.** processes b
13060 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f  ut is a no-op fo
13070 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23  r delivery..*/.#
13080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
13090 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  UG.# define Expr
130a0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
130b0 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c  ,P)  (E)->flags|
130c0 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  =(P).#else.# def
130d0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
130e0 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64  operty(E,P).#end
130f0 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
13100 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
13110 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
13120 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20  s required by a 
13130 6e 6f 72 6d 61 6c 20 45 78 70 72 20 0a 2a 2a 20  normal Expr .** 
13140 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
13150 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
13160 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
13170 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
13180 73 20 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  s .** and an Exp
13190 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
131a0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
131b0 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
131c0 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
131d0 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
131e0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
131f0 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
13200 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
13210 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
13220 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
13230 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
13240 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
13250 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
13260 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
13270 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
13280 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
13290 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
132a0 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
132b0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
132c0 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
132d0 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
132e0 20 63 6f 6d 6d 65 6e 74 20 0a 2a 2a 20 61 62 6f   comment .** abo
132f0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
13300 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
13310 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
13320 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
13330 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
13340 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
13350 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
13360 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
13370 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
13380 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
13390 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
133a0 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
133b0 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
133c0 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
133d0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
133e0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
133f0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
13400 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
13410 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
13420 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
13430 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
13440 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
13450 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
13460 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
13470 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
13480 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
13490 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
134a0 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
134b0 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
134c0 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
134d0 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
134e0 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
134f0 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
13500 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
13510 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
13520 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13530 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
13540 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
13550 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
13560 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
13570 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
13580 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
13590 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
135a0 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
135b0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
135c0 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
135d0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
135e0 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
135f0 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
13600 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
13610 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
13620 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
13630 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
13640 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
13650 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
13660 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
13670 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
13680 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
13690 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
136a0 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
136b0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
136c0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
136d0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
136e0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
136f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
13700 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
13710 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20 69 45 43  ist */.  int iEC
13720 75 72 73 6f 72 3b 20 20 20 20 20 20 20 20 20 20  ursor;          
13730 2f 2a 20 56 44 42 45 20 43 75 72 73 6f 72 20 61  /* VDBE Cursor a
13740 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
13750 68 69 73 20 45 78 70 72 4c 69 73 74 20 2a 2f 0a  his ExprList */.
13760 20 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73    struct ExprLis
13770 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20  t_item { /* For 
13780 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
13790 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  in the list */. 
137a0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
137b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
137c0 65 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  e list of expres
137d0 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 63 68 61  sions */.    cha
137e0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
137f0 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
13800 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
13810 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
13820 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
13830 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13840 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
13850 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
13860 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
13870 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
13880 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
13890 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
138a0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
138b0 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
138c0 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
138d0 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
138e0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
138f0 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
13900 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
13910 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
13920 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
13930 75 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b  u16 iOrderByCol;
13940 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f          /* For O
13950 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20  RDER BY, column 
13960 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c 74  number in result
13970 20 73 65 74 20 2a 2f 0a 20 20 20 20 75 31 36 20   set */.    u16 
13980 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  iAlias;         
13990 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74      /* Index int
139a0 6f 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d  o Parse.aAlias[]
139b0 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20   for zName */.  
139c0 7d 20 2a 61 3b 20 20 20 20 20 20 20 20 20 20 20  } *a;           
139d0 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 20         /* Alloc 
139e0 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 20 67  a power of two g
139f0 72 65 61 74 65 72 20 6f 72 20 65 71 75 61 6c 20  reater or equal 
13a00 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d 3b 0a 0a  to nExpr */.};..
13a10 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
13a20 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
13a30 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
13a40 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
13a50 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
13a60 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
13a70 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
13a80 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
13a90 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
13aa0 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
13ab0 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
13ac0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
13ad0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
13ae0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
13af0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
13b00 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
13b10 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
13b20 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
13b30 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
13b40 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
13b50 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
13b60 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
13b70 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
13b80 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13b90 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
13ba0 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
13bb0 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
13bc0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
13bd0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
13be0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
13bf0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
13c00 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
13c10 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
13c20 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
13c30 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
13c40 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
13c50 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
13c60 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
13c70 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
13c80 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
13c90 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
13ca0 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
13cb0 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
13cc0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
13cd0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
13ce0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
13cf0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
13d00 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
13d10 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
13d20 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
13d30 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
13d40 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
13d50 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
13d60 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
13d70 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
13d80 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
13d90 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
13da0 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
13db0 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
13dc0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
13dd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
13de0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
13df0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
13e00 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
13e10 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
13e20 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
13e30 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
13e40 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
13e50 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
13e60 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
13e70 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
13e80 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
13e90 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
13ea0 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
13eb0 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
13ec0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
13ed0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
13ee0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
13ef0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
13f00 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
13f10 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
13f20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
13f30 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
13f40 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
13f50 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
13f60 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
13f70 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
13f80 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 74  es on ix86..*/.t
13f90 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
13fa0 73 6b 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  sk;../*.** The n
13fb0 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
13fc0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
13fd0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
13fe0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
13ff0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
14000 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
14010 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
14020 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
14030 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
14040 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
14050 29 31 29 3c 3c 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a  )1)<<(n))../*.**
14060 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
14070 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
14080 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
14090 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
140a0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
140b0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
140c0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
140d0 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
140e0 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
140f0 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
14100 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
14110 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
14120 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
14130 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
14140 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
14150 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
14160 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
14170 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
14180 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
14190 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
141a0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
141b0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
141c0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
141d0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
141e0 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
141f0 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
14200 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
14210 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
14220 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
14230 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
14240 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
14250 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
14260 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
14270 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
14280 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
14290 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
142a0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
142b0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
142c0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
142d0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
142e0 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
142f0 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
14300 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
14310 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
14320 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
14330 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
14340 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
14350 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
14360 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
14370 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
14380 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
14390 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
143a0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
143b0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
143c0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
143d0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
143e0 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
143f0 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
14400 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
14410 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
14420 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
14430 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
14440 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
14450 63 4c 69 73 74 20 7b 0a 20 20 75 38 20 6e 53 72  cList {.  u8 nSr
14460 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
14470 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
14480 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
14490 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
144a0 2f 0a 20 20 75 38 20 6e 41 6c 6c 6f 63 3b 20 20  /.  u8 nAlloc;  
144b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
144c0 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74   entries allocat
144d0 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20  ed in a[] below 
144e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c  */.  struct SrcL
144f0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53  ist_item {.    S
14500 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
14510 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68   /* Schema to wh
14520 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69 73  ich this item is
14530 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68   fixed */.    ch
14540 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20  ar *zDatabase;  
14550 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
14560 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73  ase holding this
14570 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
14580 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
14590 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
145a0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
145b0 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a   *zAlias;     /*
145c0 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f 66   The "B" part of
145d0 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72 61   a "A AS B" phra
145e0 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68  se.  zName is th
145f0 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62  e "A" */.    Tab
14600 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
14610 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63  * An SQL table c
14620 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
14630 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c  zName */.    Sel
14640 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f  ect *pSelect;  /
14650 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74 65  * A SELECT state
14660 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61  ment used in pla
14670 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61  ce of a table na
14680 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  me */.    int ad
14690 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41  drFillSub;  /* A
146a0 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75  ddress of subrou
146b0 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74  tine to manifest
146c0 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20   a subquery */. 
146d0 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e     int regReturn
146e0 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
146f0 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20   holding return 
14700 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72 46  address of addrF
14710 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 75 38  illSub */.    u8
14720 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
14730 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
14740 62 65 74 77 65 65 6e 20 74 68 69 73 20 61 62 6c  between this abl
14750 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
14760 75 73 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  us */.    unsign
14770 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
14780 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
14790 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
147a0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
147b0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73  .    unsigned is
147c0 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
147d0 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
147e0 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
147f0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
14800 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
14810 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
14820 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
14830 69 6e 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ine */.#ifndef S
14840 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
14850 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
14860 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
14870 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
14880 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
14890 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
148a0 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
148b0 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
148c0 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
148d0 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
148e0 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
148f0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
14900 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
14910 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
14920 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
14930 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
14940 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
14950 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
14960 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
14970 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
14980 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
14990 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
149a0 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
149b0 7a 49 6e 64 65 78 3b 20 20 20 20 20 2f 2a 20 49  zIndex;     /* I
149c0 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
149d0 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
149e0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
149f0 20 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78     Index *pIndex
14a00 3b 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ;    /* Index st
14a10 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
14a20 6e 64 69 6e 67 20 74 6f 20 7a 49 6e 64 65 78 2c  nding to zIndex,
14a30 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 7d 20 61   if any */.  } a
14a40 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
14a50 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
14a60 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
14a70 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
14a80 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
14a90 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
14aa0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
14ab0 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
14ac0 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
14ad0 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
14ae0 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
14af0 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
14b00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
14b10 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
14b20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
14b30 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
14b40 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
14b50 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
14b60 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
14b70 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
14b80 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
14b90 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
14ba0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
14bb0 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
14bc0 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
14bd0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
14be0 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
14bf0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
14c00 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
14c10 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
14c20 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
14c30 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
14c40 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
14c50 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
14c60 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
14c70 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
14c80 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
14c90 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
14ca0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
14cb0 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
14cc0 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
14cd0 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
14ce0 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
14cf0 62 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ber..*/.#define 
14d00 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
14d10 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
14d20 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
14d30 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
14d40 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
14d50 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
14d60 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
14d70 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
14d80 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
14d90 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
14da0 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
14db0 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
14dc0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
14dd0 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
14de0 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
14df0 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
14e00 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
14e10 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
14e20 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f  ERE_DUPLICATES_O
14e30 4b 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 4f  K    0x0008 /* O
14e40 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f  k to return a ro
14e50 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65  w more than once
14e60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
14e70 45 5f 4f 4d 49 54 5f 4f 50 45 4e 5f 43 4c 4f 53  E_OMIT_OPEN_CLOS
14e80 45 20 20 30 78 30 30 31 30 20 2f 2a 20 54 61 62  E  0x0010 /* Tab
14e90 6c 65 20 63 75 72 73 6f 72 73 20 61 72 65 20 61  le cursors are a
14ea0 6c 72 65 61 64 79 20 6f 70 65 6e 20 2a 2f 0a 23  lready open */.#
14eb0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 46 4f 52  define WHERE_FOR
14ec0 43 45 5f 54 41 42 4c 45 20 20 20 20 20 20 30 78  CE_TABLE      0x
14ed0 30 30 32 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 75  0020 /* Do not u
14ee0 73 65 20 61 6e 20 69 6e 64 65 78 2d 6f 6e 6c 79  se an index-only
14ef0 20 73 65 61 72 63 68 20 2a 2f 0a 23 64 65 66 69   search */.#defi
14f00 6e 65 20 57 48 45 52 45 5f 4f 4e 45 54 41 42 4c  ne WHERE_ONETABL
14f10 45 5f 4f 4e 4c 59 20 20 20 20 30 78 30 30 34 30  E_ONLY    0x0040
14f20 20 2f 2a 20 4f 6e 6c 79 20 63 6f 64 65 20 74 68   /* Only code th
14f30 65 20 31 73 74 20 74 61 62 6c 65 20 69 6e 20 70  e 1st table in p
14f40 54 61 62 4c 69 73 74 20 2a 2f 0a 23 64 65 66 69  TabList */.#defi
14f50 6e 65 20 57 48 45 52 45 5f 41 4e 44 5f 4f 4e 4c  ne WHERE_AND_ONL
14f60 59 20 20 20 20 20 20 20 20 20 30 78 30 30 38 30  Y         0x0080
14f70 20 2f 2a 20 44 6f 6e 27 74 20 75 73 65 20 69 6e   /* Don't use in
14f80 64 69 63 65 73 20 66 6f 72 20 4f 52 20 74 65 72  dices for OR ter
14f90 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ms */.#define WH
14fa0 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
14fb0 20 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 70       0x0100 /* p
14fc0 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
14fd0 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
14fe0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
14ff0 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
15000 78 30 32 30 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0200 /* pOrderb
15010 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
15020 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
15030 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
15040 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
15050 30 78 30 34 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0400 /* All ou
15060 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
15070 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 0a 2f 2a   distinct */../*
15080 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
15090 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
150a0 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
150b0 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ct().*/.#define 
150c0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e  WHERE_DISTINCT_N
150d0 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44  OOP      0  /* D
150e0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
150f0 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66  not used */.#def
15100 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
15110 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20  CT_UNIQUE    1  
15120 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73  /* No duplicates
15130 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
15140 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52  E_DISTINCT_ORDER
15150 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64  ED   2  /* All d
15160 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64  uplicates are ad
15170 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  jacent */.#defin
15180 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
15190 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a  _UNORDERED 3  /*
151a0 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   Duplicates are 
151b0 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a  scattered */../*
151c0 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78  .** A NameContex
151d0 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74  t defines a cont
151e0 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20  ext in which to 
151f0 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e  resolve table an
15200 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65  d column.** name
15210 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20  s.  The context 
15220 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69  consists of a li
15230 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68  st of tables (th
15240 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c  e pSrcList) fiel
15250 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20  d and.** a list 
15260 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  of named express
15270 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54  ion (pEList).  T
15280 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73  he named express
15290 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20  ion list may.** 
152a0 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53  be NULL.  The pS
152b0 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  rc corresponds t
152c0 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  o the FROM claus
152d0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  e of a SELECT or
152e0 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65  .** to the table
152f0 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
15300 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50  on by INSERT, UP
15310 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e  DATE, or DELETE.
15320 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20    The.** pEList 
15330 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
15340 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66  he result set of
15350 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73   a SELECT and is
15360 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68   NULL for.** oth
15370 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  er statements..*
15380 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  *.** NameContext
15390 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e  s can be nested.
153a0 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67    When resolving
153b0 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65   names, the inne
153c0 72 2d 6d 6f 73 74 20 0a 2a 2a 20 63 6f 6e 74 65  r-most .** conte
153d0 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
153e0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
153f0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
15400 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
15410 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
15420 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
15430 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
15440 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
15450 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
15460 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
15470 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
15480 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
15490 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
154a0 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
154b0 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
154c0 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
154d0 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
154e0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
154f0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
15500 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
15510 64 2e 20 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  d. .**.** Each s
15520 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
15530 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
15540 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
15550 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
15560 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
15570 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
15580 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
15590 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
155a0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
155b0 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
155c0 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
155d0 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
155e0 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
155f0 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
15600 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
15610 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
15620 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
15630 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
15640 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
15650 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
15660 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
15670 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
15680 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
15690 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
156a0 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
156b0 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
156c0 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
156d0 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
156e0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
156f0 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
15700 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
15710 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
15720 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
15730 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
15740 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
15750 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
15760 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
15770 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
15780 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
15790 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
157a0 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
157b0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
157c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
157d0 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
157e0 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
157f0 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
15800 20 75 38 20 6e 63 46 6c 61 67 73 3b 20 20 20 20   u8 ncFlags;    
15810 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
15820 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
15830 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
15840 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
15850 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
15860 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
15870 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
15880 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
15890 6f 77 41 67 67 20 20 30 78 30 31 20 20 20 20 2f  owAgg  0x01    /
158a0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
158b0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
158c0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
158d0 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
158e0 78 30 32 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  x02    /* One or
158f0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
15900 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
15910 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
15920 68 65 63 6b 20 20 20 30 78 30 34 20 20 20 20 2f  heck   0x04    /
15930 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
15940 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
15950 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
15960 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
15970 41 67 67 46 75 6e 63 20 30 78 30 38 20 20 20 20  AggFunc 0x08    
15980 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
15990 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
159a0 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
159b0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
159c0 49 64 78 20 20 20 30 78 31 30 20 20 20 20 2f 2a  Idx   0x10    /*
159d0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
159e0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
159f0 65 78 20 57 48 45 52 45 20 2a 2f 0a 0a 2f 2a 0a  ex WHERE */../*.
15a00 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15a10 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
15a20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
15a30 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
15a40 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
15a50 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
15a60 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
15a70 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
15a80 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
15a90 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
15aa0 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
15ab0 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
15ac0 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
15ad0 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
15ae0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
15af0 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
15b00 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
15b10 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
15b20 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
15b30 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
15b40 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
15b50 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
15b60 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
15b70 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
15b80 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
15b90 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
15ba0 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
15bb0 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
15bc0 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
15bd0 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
15be0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
15bf0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
15c00 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
15c10 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
15c20 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
15c30 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
15c40 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
15c50 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
15c60 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
15c70 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
15c80 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
15c90 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
15ca0 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
15cb0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
15cc0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
15cd0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
15ce0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
15cf0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
15d00 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
15d10 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
15d20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
15d30 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
15d40 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
15d50 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
15d60 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
15d70 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
15d80 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
15d90 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
15da0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
15db0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
15dc0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
15dd0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
15de0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
15df0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
15e00 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
15e10 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
15e20 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
15e30 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
15e40 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
15e50 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
15e60 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
15e70 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
15ea0 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
15eb0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
15ec0 54 20 2a 2f 0a 20 20 75 31 36 20 73 65 6c 46 6c  T */.  u16 selFl
15ed0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
15ee0 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
15ef0 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
15f00 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
15f10 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
15f20 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
15f30 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
15f40 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20 61 64  ters */.  int ad
15f50 64 72 4f 70 65 6e 45 70 68 6d 5b 33 5d 3b 20 20  drOpenEphm[3];  
15f60 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
15f70 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
15f80 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
15f90 2a 2f 0a 20 20 75 36 34 20 6e 53 65 6c 65 63 74  */.  u64 nSelect
15fa0 52 6f 77 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Row;        /* E
15fb0 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20  stimated number 
15fc0 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a  of result rows *
15fd0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
15fe0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
15ff0 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
16000 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
16010 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16020 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
16030 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
16040 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
16050 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
16060 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
16070 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
16080 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
16090 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
160a0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
160b0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
160c0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
160d0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
160e0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
160f0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
16100 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
16110 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
16120 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
16130 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
16140 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
16150 6f 75 6e 64 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ound */.  Select
16160 20 2a 70 52 69 67 68 74 6d 6f 73 74 3b 20 20 20   *pRightmost;   
16170 20 2f 2a 20 52 69 67 68 74 2d 6d 6f 73 74 20 73   /* Right-most s
16180 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
16190 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
161a0 6d 65 6e 74 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ment */.  Expr *
161b0 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
161c0 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
161d0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
161e0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
161f0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
16200 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
16210 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
16220 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
16230 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
16240 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
16250 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
16260 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
16270 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
16280 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
16290 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44  .*/.#define SF_D
162a0 69 73 74 69 6e 63 74 20 20 20 20 20 20 20 20 30  istinct        0
162b0 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74  x0001  /* Output
162c0 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49   should be DISTI
162d0 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NCT */.#define S
162e0 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20  F_Resolved      
162f0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 64 65    0x0002  /* Ide
16300 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65  ntifiers have be
16310 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23  en resolved */.#
16320 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67  define SF_Aggreg
16330 61 74 65 20 20 20 20 20 20 20 30 78 30 30 30 34  ate       0x0004
16340 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67    /* Contains ag
16350 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
16360 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
16370 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 20  UsesEphemeral   
16380 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65 73 20  0x0008  /* Uses 
16390 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61  the OpenEphemera
163a0 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66  l opcode */.#def
163b0 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20  ine SF_Expanded 
163c0 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20 2f         0x0010  /
163d0 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  * sqlite3SelectE
163e0 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f  xpand() called o
163f0 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e  n this */.#defin
16400 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f  e SF_HasTypeInfo
16410 20 20 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20       0x0020  /* 
16420 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20  FROM subqueries 
16430 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64  have Table metad
16440 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ata */.#define S
16450 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20 20 20  F_UseSorter     
16460 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53 6f 72    0x0040  /* Sor
16470 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74 65 72  t using a sorter
16480 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
16490 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 20 30  alues          0
164a0 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74 68 65  x0080  /* Synthe
164b0 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
164c0 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
164d0 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61 6c 69  ine SF_Materiali
164e0 7a 65 20 20 20 20 20 30 78 30 31 30 30 20 20 2f  ze     0x0100  /
164f0 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69 61 6c  * Force material
16500 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65 77 73  ization of views
16510 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e   */.#define SF_N
16520 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 20 30  estedFrom      0
16530 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  x0200  /* Part o
16540 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65  f a parenthesize
16550 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  d FROM clause */
16560 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
16570 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78 30 34  eConvert    0x04
16580 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
16590 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
165a0 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
165b0 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73  .../*.** The res
165c0 75 6c 74 73 20 6f 66 20 61 20 73 65 6c 65 63 74  ults of a select
165d0 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75   can be distribu
165e0 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77  ted in several w
165f0 61 79 73 2e 20 20 54 68 65 0a 2a 2a 20 22 53 52  ays.  The.** "SR
16600 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
16610 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 20 54  "SELECT Result T
16620 79 70 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ype"..*/.#define
16630 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
16640 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
16650 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
16660 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
16670 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
16680 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
16690 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
166a0 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
166b0 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
166c0 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
166d0 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
166e0 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
166f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
16700 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
16710 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
16720 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
16730 65 72 65 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f  ere */../* The O
16740 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69  RDER BY clause i
16750 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c  s ignored for al
16760 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a  l of the above *
16770 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61  /.#define Ignora
16780 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28  bleOrderby(X) ((
16790 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44  X->eDest)<=SRT_D
167a0 69 73 63 61 72 64 29 0a 0a 23 64 65 66 69 6e 65  iscard)..#define
167b0 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
167c0 20 20 35 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    5  /* Output e
167d0 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
167e0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
167f0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 20 36 20  _Mem          6 
16800 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16810 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
16820 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
16830 5f 53 65 74 20 20 20 20 20 20 20 20 20 20 37 20  _Set          7 
16840 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
16850 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
16860 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
16870 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
16880 20 20 38 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    8  /* Store re
16890 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
168a0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
168b0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
168c0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
168d0 20 39 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72   9  /* Create tr
168e0 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
168f0 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
16900 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
16910 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
16920 31 30 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  10  /* Generate 
16930 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
16940 72 65 73 75 6c 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  result */../*.**
16950 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
16960 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
16970 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
16980 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
16990 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
169a0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
169b0 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
169c0 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
169d0 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
169e0 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
169f0 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
16a00 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
16a10 20 20 63 68 61 72 20 61 66 66 53 64 73 74 3b 20    char affSdst; 
16a20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
16a30 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
16a40 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
16a50 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
16a60 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75  /* A parameter u
16a70 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74  sed by the eDest
16a80 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64   disposal method
16a90 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b   */.  int iSdst;
16aa0 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
16ab0 72 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72  register where r
16ac0 65 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74  esults are writt
16ad0 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73  en */.  int nSds
16ae0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  t;        /* Num
16af0 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
16b00 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 7d 3b   allocated */.};
16b10 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63  ../*.** During c
16b20 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  ode generation o
16b30 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61  f statements tha
16b40 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74  t do inserts int
16b50 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  o AUTOINCREMENT 
16b60 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
16b70 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
16b80 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
16b90 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
16ba0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
16bb0 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
16bc0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
16bd0 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
16be0 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
16bf0 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
16c00 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
16c10 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
16c20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
16c30 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
16c40 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
16c50 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
16c60 64 6f 77 6e 20 77 69 74 68 69 6e 20 74 72 69 67  down within trig
16c70 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
16c80 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
16c90 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
16ca0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
16cb0 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
16cc0 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
16cd0 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
16ce0 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
16cf0 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
16d00 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
16d10 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
16d20 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
16d30 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
16d40 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
16d50 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
16d60 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
16d70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
16d80 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
16d90 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
16da0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
16db0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
16dc0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
16dd0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
16de0 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
16df0 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
16e00 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
16e10 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
16e20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
16e30 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
16e40 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
16e50 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
16e60 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
16e70 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
16e80 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
16e90 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
16ea0 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
16eb0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
16ec0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
16ed0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
16ee0 20 65 61 63 68 20 0a 2a 2a 20 74 72 69 67 67 65   each .** trigge
16ef0 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
16f00 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
16f10 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
16f20 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
16f30 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
16f40 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
16f50 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
16f60 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
16f70 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
16f80 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
16f90 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
16fa0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
16fb0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
16fc0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
16fd0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
16fe0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
16ff0 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
17000 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
17010 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
17020 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
17030 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
17040 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
17050 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
17060 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
17070 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
17080 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
17090 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
170a0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
170b0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
170c0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
170d0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
170e0 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
170f0 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
17100 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
17110 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
17120 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
17130 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
17140 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
17150 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
17160 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
17170 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
17180 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
17190 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73 74 61 74   INSERT .** stat
171a0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
171b0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
171c0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
171d0 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
171e0 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
171f0 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
17200 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
17210 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
17220 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
17230 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
17240 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
17250 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
17260 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
17270 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
17280 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
17290 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
172a0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
172b0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
172c0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
172d0 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
172e0 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
172f0 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
17300 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
17310 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
17320 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
17330 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
17340 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
17350 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
17360 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
17370 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
17380 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
17390 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
173a0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
173b0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
173c0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
173d0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
173e0 0a 20 20 74 79 70 65 64 65 66 20 73 71 6c 69 74  .  typedef sqlit
173f0 65 33 5f 75 69 6e 74 36 34 20 79 44 62 4d 61 73  e3_uint64 yDbMas
17400 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
17410 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
17420 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a  yDbMask;.#endif.
17430 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61  ./*.** An SQL pa
17440 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41  rser context.  A
17450 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74   copy of this st
17460 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
17470 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65  d through.** the
17480 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e   parser and down
17490 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61   into all the pa
174a0 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74  rser action rout
174b0 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ine in order to.
174c0 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20  ** carry around 
174d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
174e0 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
174f0 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a  e entire parse..
17500 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74  **.** The struct
17510 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69  ure is divided i
17520 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20  nto two parts.  
17530 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20  When the parser 
17540 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65  and code.** gene
17550 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65  rate call themse
17560 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79  lves recursively
17570 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74  , the first part
17580 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72   of the structur
17590 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74  e.** is constant
175a0 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20   but the second 
175b0 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74  part is reset at
175c0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61   the beginning a
175d0 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63  nd end of.** eac
175e0 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a  h recursion..**.
175f0 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63  ** The nTableLoc
17600 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b  k and aTableLock
17610 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f   variables are o
17620 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20  nly used if the 
17630 73 68 61 72 65 64 2d 63 61 63 68 65 20 0a 2a 2a  shared-cache .**
17640 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
17650 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
17660 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
17670 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
17680 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
17690 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
176a0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
176b0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
176c0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
176d0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
176e0 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
176f0 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
17700 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
17710 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
17720 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
17730 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
17740 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
17750 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
17760 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
17770 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
17780 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
17790 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
177a0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
177b0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
177c0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
177d0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
177e0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
177f0 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
17800 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
17810 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
17820 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
17830 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
17840 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
17850 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
17860 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
17870 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
17880 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
17890 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
178a0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
178b0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
178c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
178d0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
178e0 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
178f0 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
17900 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
17910 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17920 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
17930 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
17940 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d  g[] */.  u8 nTem
17950 70 49 6e 55 73 65 3b 20 20 20 20 20 20 20 2f 2a  pInUse;       /*
17960 20 4e 75 6d 62 65 72 20 6f 66 20 61 54 65 6d 70   Number of aTemp
17970 52 65 67 5b 5d 20 63 75 72 72 65 6e 74 6c 79 20  Reg[] currently 
17980 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
17990 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
179a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
179b0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
179c0 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 75  olCache[] */.  u
179d0 38 20 69 43 6f 6c 43 61 63 68 65 3b 20 20 20 20  8 iColCache;    
179e0 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72      /* Next entr
179f0 79 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  y in aColCache[]
17a00 20 74 6f 20 72 65 70 6c 61 63 65 20 2a 2f 0a 20   to replace */. 
17a10 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
17a20 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
17a30 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
17a40 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
17a50 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
17a60 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
17a70 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
17a80 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
17a90 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
17aa0 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
17ab0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
17ac0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
17ad0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
17ae0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
17af0 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ry() */.  int aT
17b00 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 2f  empReg[8];     /
17b10 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
17b20 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
17b30 69 73 74 65 72 73 20 2a 2f 0a 20 20 69 6e 74 20  isters */.  int 
17b40 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20  nRangeReg;      
17b50 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20   /* Size of the 
17b60 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
17b70 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
17b80 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t iRangeReg;    
17b90 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69     /* First regi
17ba0 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72  ster in temporar
17bb0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
17bc0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
17bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17be0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73  mber of errors s
17bf0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61  een */.  int nTa
17c00 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
17c10 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69   Number of previ
17c20 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20  ously allocated 
17c30 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a  VDBE cursors */.
17c40 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
17c50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17c60 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
17c70 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
17c80 20 20 69 6e 74 20 6e 53 65 74 3b 20 20 20 20 20    int nSet;     
17c90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17ca0 20 6f 66 20 73 65 74 73 20 75 73 65 64 20 73 6f   of sets used so
17cb0 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
17cc0 6e 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nce;           /
17cd0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f 50 5f 4f  * Number of OP_O
17ce0 6e 63 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  nce instructions
17cf0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
17d00 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
17d10 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
17d20 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
17d30 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
17d40 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 50 61  nts */.  int iPa
17d50 72 74 49 64 78 54 61 62 3b 20 20 20 20 20 2f 2a  rtIdxTab;     /*
17d60 20 54 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   Table correspon
17d70 64 69 6e 67 20 74 6f 20 61 20 70 61 72 74 69 61  ding to a partia
17d80 6c 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  l index */.  int
17d90 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
17da0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
17db0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
17dc0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
17dd0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
17de0 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
17df0 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
17e00 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
17e10 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
17e20 61 6c 75 65 73 20 2a 2f 0a 20 20 73 74 72 75 63  alues */.  struc
17e30 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20  t yColCache {.  
17e40 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
17e50 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
17e60 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
17e70 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
17e80 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
17e90 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62  able column numb
17ea0 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d  er */.    u8 tem
17eb0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20  pReg;           
17ec0 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65 6d  /* iReg is a tem
17ed0 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  p register that 
17ee0 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65 65  needs to be free
17ef0 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65  d */.    int iLe
17f00 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  vel;           /
17f10 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20  * Nesting level 
17f20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b  */.    int iReg;
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17f40 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f  Reg with value o
17f50 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30  f this column. 0
17f60 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a   means none. */.
17f70 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20      int lru;    
17f80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61            /* Lea
17f90 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64  st recently used
17fa0 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20 73   entry has the s
17fb0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f  mallest value */
17fc0 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53  .  } aColCache[S
17fd0 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
17fe0 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65  ];  /* One for e
17ff0 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  ach column cache
18000 20 65 6e 74 72 79 20 2a 2f 0a 20 20 79 44 62 4d   entry */.  yDbM
18010 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
18020 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
18030 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
18040 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
18050 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
18060 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
18070 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
18080 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
18090 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b  es */.  int cook
180a0 69 65 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20  ieGoto;      /* 
180b0 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f  Address of OP_Go
180c0 74 6f 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72  to to cookie ver
180d0 69 66 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65  ifier subroutine
180e0 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
180f0 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58  Value[SQLITE_MAX
18100 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f  _ATTACHED+2];  /
18110 2a 20 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b  * Values of cook
18120 69 65 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f  ies to verify */
18130 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
18140 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
18150 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
18160 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
18170 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
18180 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
18190 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
181a0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
181b0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
181c0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
181d0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
181e0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
181f0 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
18200 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
18210 72 61 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ram */.  Token c
18220 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
18230 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
18240 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
18250 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
18260 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18270 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
18280 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
18290 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
182a0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
182b0 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
182c0 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
182d0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
182e0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
182f0 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
18300 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
18310 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
18320 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
18330 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
18340 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
18350 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66  ers */..  /* Inf
18360 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68  ormation used wh
18370 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67  ile coding trigg
18380 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a  er programs. */.
18390 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76    Parse *pToplev
183a0 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20  el;    /* Parse 
183b0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61  structure for ma
183c0 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e  in program (or N
183d0 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ULL) */.  Table 
183e0 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f  *pTriggerTab;  /
183f0 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73  * Table triggers
18400 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64   are being coded
18410 20 66 6f 72 20 2a 2f 0a 20 20 75 33 32 20 6e 51   for */.  u32 nQ
18420 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
18430 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
18440 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
18450 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
18460 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
18470 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
18480 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
18490 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
184a0 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
184b0 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
184c0 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
184d0 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
184e0 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
184f0 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
18500 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
18510 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
18520 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
18530 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
18540 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
18550 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
18560 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
18570 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
18580 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
18590 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
185a0 0a 0a 20 20 2f 2a 20 41 62 6f 76 65 20 69 73 20  ..  /* Above is 
185b0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
185c0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
185d0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
185e0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
185f0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
18600 6e 20 2a 2f 0a 0a 20 20 69 6e 74 20 6e 56 61 72  n */..  int nVar
18610 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18620 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27    /* Number of '
18630 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65  ?' variables see
18640 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20  n in the SQL so 
18650 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 7a 56  far */.  int nzV
18660 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
18670 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
18680 61 76 61 69 6c 61 62 6c 65 20 73 6c 6f 74 73 20  available slots 
18690 69 6e 20 61 7a 56 61 72 5b 5d 20 2a 2f 0a 20 20  in azVar[] */.  
186a0 75 38 20 61 64 64 72 43 72 54 61 62 3b 20 20 20  u8 addrCrTab;   
186b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64            /* Add
186c0 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74  ress of OP_Creat
186d0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 2a 2f  eTable opcode */
186e0 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
186f0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
18700 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
18710 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
18720 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
18730 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
18740 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
18750 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
18760 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
18770 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
18780 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18790 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
187a0 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
187b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
187c0 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
187d0 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
187e0 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
187f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18800 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
18810 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
18820 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
18830 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   nAlias;        
18840 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18850 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73 75   of aliased resu
18860 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a  lt set columns *
18870 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  /.  int nHeight;
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18890 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65   Expression tree
188a0 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72 65   height of curre
188b0 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f  nt sub-select */
188c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
188d0 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69  OMIT_EXPLAIN.  i
188e0 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  nt iSelectId;   
188f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f           /* ID o
18900 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74  f current select
18910 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
18920 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65  put */.  int iNe
18930 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20  xtSelectId;     
18940 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c     /* Next avail
18950 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66  able select ID f
18960 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
18970 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63 68  t */.#endif.  ch
18980 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20 20  ar **azVar;     
18990 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
189a0 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66 20  ers to names of 
189b0 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
189c0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
189d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
189e0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
189f0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
18a00 72 65 28 29 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  re()) */.  int *
18a10 61 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20  aAlias;         
18a20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
18a30 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 6c   used to hold al
18a40 69 61 73 65 64 20 72 65 73 75 6c 74 20 2a 2f 0a  iased result */.
18a50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
18a60 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
18a70 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
18a80 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
18a90 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
18aa0 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
18ab0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
18ac0 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
18ad0 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
18ae0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
18af0 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
18b00 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
18b10 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
18b20 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
18b30 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
18b40 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
18b50 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
18b60 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
18b70 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
18b80 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
18b90 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
18ba0 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
18bb0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
18bc0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
18bd0 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
18be0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
18bf0 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
18c00 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
18c10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18c20 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
18c30 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
18c40 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
18c50 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
18c60 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
18c70 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
18c80 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
18c90 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
18ca0 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
18cb0 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
18cc0 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
18cd0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
18ce0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
18cf0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
18d00 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
18d10 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
18d20 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
18d30 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
18d40 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
18d50 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  .};../*.** Retur
18d60 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
18d70 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
18d80 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
18d90 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
18da0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
18db0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
18dc0 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
18dd0 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
18de0 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
18df0 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
18e00 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
18e10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
18e20 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
18e30 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
18e40 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
18e50 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
18e60 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
18e70 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
18e80 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
18e90 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
18ea0 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
18eb0 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
18ec0 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
18ed0 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
18ee0 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
18ef0 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
18f00 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
18f10 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
18f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
18f30 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
18f40 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
18f50 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
18f60 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
18f70 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
18f80 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  s..*/.#define OP
18f90 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
18fa0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65     0x01    /* Se
18fb0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
18fc0 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69  nChange */.#defi
18fd0 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
18fe0 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20  WID     0x02    
18ff0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
19000 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
19010 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
19020 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
19030 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
19040 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
19050 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
19060 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
19070 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
19080 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
19090 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
190a0 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
190b0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
190c0 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
190d0 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
190e0 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
190f0 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
19100 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
19110 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43      0x20    /* C
19120 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c  lear pseudo-tabl
19130 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f  e cache in OP_Co
19140 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
19150 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
19160 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
19170 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
19180 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
19190 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
191a0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
191b0 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
191c0 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
191d0 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
191e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
191f0 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
19200 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
19210 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
19220 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
19230 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
19240 53 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20  SREG       0x02 
19250 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
19260 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
19270 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
19280 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
19290 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
192a0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
192b0 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
192c0 61 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20  ation */../*. * 
192d0 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65  Each trigger pre
192e0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
192f0 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73  base schema is s
19300 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74  tored as an inst
19310 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63  ance of. * struc
19320 74 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20  t Trigger. . *. 
19330 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
19340 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
19350 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
19360 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
19370 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
19380 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
19390 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
193a0 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
193b0 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a  represents the .
193c0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
193d0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
193e0 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
193f0 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
19400 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
19410 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
19420 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
19430 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
19440 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
19450 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
19460 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
19470 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
19480 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
19490 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
194a0 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
194b0 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
194c0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
194d0 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
194e0 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
194f0 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
19500 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
19510 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
19520 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
19530 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
19540 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
19550 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
19560 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
19570 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
19580 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
19590 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
195a0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
195b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
195c0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
195d0 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
195f0 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
19600 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
19610 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
19620 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
19630 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
19640 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
19650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
19660 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
19670 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
19680 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
19690 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
196a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
196b0 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
196c0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
196d0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
196e0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
196f0 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
19700 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
19710 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
19720 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
19730 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
19740 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
19750 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
19760 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
19790 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
197a0 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
197b0 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
197c0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
197d0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
197e0 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
197f0 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
19800 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
19810 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
19820 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
19830 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
19840 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
19850 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
19860 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
19870 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
19880 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
19890 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
198a0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
198b0 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
198c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
198d0 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
198e0 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
198f0 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
19900 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
19910 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
19920 6e 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a  ne which. .**.**
19930 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75   If there are mu
19940 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c  ltiple triggers,
19950 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f   you might of so
19960 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f  me BEFORE and so
19970 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20  me AFTER..** In 
19980 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20  that cases, the 
19990 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20  constants below 
199a0 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65  can be ORed toge
199b0 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
199c0 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20   TRIGGER_BEFORE 
199d0 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47   1.#define TRIGG
199e0 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a  ER_AFTER   2../*
199f0 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  . * An instance 
19a00 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
19a10 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f  rStep is used to
19a20 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20   store a single 
19a30 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a  SQL statement. *
19a40 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20   that is a part 
19a50 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f  of a trigger-pro
19a60 67 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73  gram. . *. * Ins
19a70 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
19a80 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
19a90 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
19aa0 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
19ab0 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
19ac0 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
19ad0 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
19ae0 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
19af0 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
19b00 20 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20   . * associated 
19b10 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
19b20 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
19b30 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
19b40 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
19b50 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
19b60 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
19b70 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20  r-program.. * . 
19b80 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
19b90 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
19ba0 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
19bb0 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
19bc0 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
19bd0 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
19be0 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
19bf0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
19c00 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
19c10 69 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20  ined by the . * 
19c20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
19c30 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
19c40 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
19c50 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
19c60 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
19c70 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
19c80 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
19c90 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
19ca0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
19cb0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
19cc0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
19ce0 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
19cf0 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
19d00 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
19d10 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61  wise NULL.. * ta
19d20 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b  rget    -> A tok
19d30 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71  en holding the q
19d40 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
19d50 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
19d60 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
19d70 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
19d80 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
19d90 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
19da0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
19db0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
19dc0 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
19dd0 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
19de0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
19df0 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
19e00 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
19e10 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
19e20 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
19e30 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20  >) VALUES ... . 
19e40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
19e50 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
19e60 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
19e70 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
19e80 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
19e90 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
19ea0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
19eb0 5f 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67  _DELETE). * targ
19ec0 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e  et    -> A token
19ed0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f   holding the quo
19ee0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
19ef0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
19f00 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
19f10 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
19f20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
19f30 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
19f40 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
19f50 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
19f60 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
19f70 4c 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d  LL.. * . * (op =
19f80 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
19f90 74 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74  target    -> A t
19fa0 6f 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65  oken holding the
19fb0 20 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20   quoted name of 
19fc0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
19fd0 61 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20  ate rows of.. * 
19fe0 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
19ff0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
1a000 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
1a010 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
1a020 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
1a030 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
1a040 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
1a050 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
1a060 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
1a070 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
1a080 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
1a090 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
1a0a0 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
1a0b0 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
1a0c0 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
1a0d0 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
1a0e0 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
1a0f0 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a    argument.. * .
1a100 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
1a110 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70  erStep {.  u8 op
1a120 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1a130 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c  /* One of TK_DEL
1a140 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20  ETE, TK_UPDATE, 
1a150 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45  TK_INSERT, TK_SE
1a160 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63  LECT */.  u8 orc
1a170 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f  onf;           /
1a180 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74  * OE_Rollback et
1a190 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  c. */.  Trigger 
1a1a0 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20  *pTrig;      /* 
1a1b0 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74  The trigger that
1a1c0 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20   this step is a 
1a1d0 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c  part of */.  Sel
1a1e0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
1a1f0 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74    /* SELECT stat
1a200 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
1a210 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45  NSERT INTO .. SE
1a220 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f  LECT ... */.  To
1a230 6b 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20  ken target;     
1a240 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
1a250 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
1a260 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
1a270 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1a280 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1a290 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
1a2a0 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
1a2b0 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
1a2c0 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
1a2d0 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
1a2e0 6f 72 20 55 50 44 41 54 45 2e 20 20 56 41 4c 55  or UPDATE.  VALU
1a2f0 45 53 20 63 6c 61 75 73 65 20 66 6f 72 20 49 4e  ES clause for IN
1a300 53 45 52 54 20 2a 2f 0a 20 20 49 64 4c 69 73 74  SERT */.  IdList
1a310 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
1a320 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
1a330 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
1a340 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
1a350 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
1a360 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
1a370 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
1a380 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
1a390 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
1a3a0 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
1a3b0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
1a3c0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
1a3d0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1a3e0 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
1a3f0 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
1a400 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
1a410 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
1a420 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
1a430 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
1a440 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
1a450 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
1a460 20 20 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74    .*/.typedef st
1a470 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
1a480 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
1a490 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
1a4a0 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
1a4b0 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
1a4c0 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
1a4d0 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
1a4e0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
1a4f0 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
1a500 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
1a510 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
1a520 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
1a530 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
1a540 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
1a550 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
1a560 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
1a570 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
1a580 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
1a590 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
1a5a0 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
1a5b0 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
1a5c0 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
1a5d0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
1a5e0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
1a5f0 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
1a600 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
1a610 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
1a620 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
1a630 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
1a640 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
1a650 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
1a660 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
1a670 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
1a680 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
1a690 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
1a6a0 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
1a6b0 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
1a6c0 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
1a6d0 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
1a6e0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
1a6f0 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
1a700 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
1a710 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
1a720 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
1a730 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
1a740 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
1a750 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
1a760 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
1a770 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
1a780 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
1a790 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
1a7a0 61 72 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 43 68  ar */.  int  nCh
1a7b0 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
1a7c0 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
1a7d0 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
1a7e0 20 69 6e 74 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   int  nAlloc;   
1a7f0 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
1a800 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
1a810 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
1a820 20 69 6e 74 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   int  mxAlloc;  
1a830 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
1a840 20 61 6c 6c 6f 77 65 64 20 73 74 72 69 6e 67 20   allowed string 
1a850 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 75 38 20 20  length */.  u8  
1a860 20 75 73 65 4d 61 6c 6c 6f 63 3b 20 20 20 20 20   useMalloc;     
1a870 20 2f 2a 20 30 3a 20 6e 6f 6e 65 2c 20 20 31 3a   /* 0: none,  1:
1a880 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1a890 2c 20 20 32 3a 20 73 71 6c 69 74 65 33 5f 6d 61  ,  2: sqlite3_ma
1a8a0 6c 6c 6f 63 20 2a 2f 0a 20 20 75 38 20 20 20 61  lloc */.  u8   a
1a8b0 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
1a8c0 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
1a8d0 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
1a8e0 42 49 47 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  BIG */.};.#defin
1a8f0 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
1a900 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
1a910 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
1a920 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
1a930 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
1a940 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
1a950 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
1a960 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
1a970 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
1a980 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
1a990 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
1a9a0 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
1a9b0 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
1a9c0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1a9d0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
1a9e0 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
1a9f0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
1aa00 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
1aa10 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
1aa20 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1aa30 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1aa40 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
1aa50 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
1aa60 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
1aa70 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
1aa80 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1aa90 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
1aaa0 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
1aab0 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
1aac0 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
1aad0 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
1aae0 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
1aaf0 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
1ab00 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
1ab10 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
1ab20 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
1ab30 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
1ab40 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1ab50 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
1ab60 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
1ab70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ab80 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
1ab90 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
1aba0 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
1abb0 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
1abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1abd0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
1abe0 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
1abf0 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
1ac00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ac10 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
1ac20 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
1ac30 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
1ac40 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
1ac50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1ac60 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
1ac70 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
1ac80 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
1ac90 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
1aca0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
1acb0 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
1acc0 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
1acd0 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
1ace0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
1acf0 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
1ad00 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
1ad10 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
1ad20 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
1ad30 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1ad40 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
1ad50 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
1ad60 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ad80 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
1ad90 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
1ada0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
1adb0 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
1adc0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
1add0 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
1ade0 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
1adf0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1ae00 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
1ae10 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
1ae20 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
1ae30 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
1ae40 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
1ae50 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
1ae60 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
1ae70 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
1ae80 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
1aeb0 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
1aec0 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
1aef0 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
1af00 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
1af10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1af20 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
1af30 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
1af40 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
1af50 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
1af60 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
1af70 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
1af80 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
1af90 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
1afa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1afb0 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
1afc0 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
1afd0 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aff0 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
1b000 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
1b010 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
1b020 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
1b030 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
1b040 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
1b050 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b070 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
1b080 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
1b090 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
1b0c0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
1b0d0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b0f0 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
1b100 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
1b110 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b130 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b140 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
1b150 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
1b160 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
1b170 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
1b180 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
1b190 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
1b1a0 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
1b1b0 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
1b1c0 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
1b1d0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1b1e0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f  e enabled */.  /
1b1f0 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68  * The above migh
1b200 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1b210 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54   to non-zero.  T
1b220 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65  he following nee
1b230 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a  d to always.  **
1b240 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65   initially be ze
1b250 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a  ro, however. */.
1b260 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20    int isInit;   
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
1b290 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  r initialization
1b2a0 20 68 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f   has finished */
1b2b0 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73  .  int inProgres
1b2c0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
1b2d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69       /* True whi
1b2e0 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  le initializatio
1b2f0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f  n in progress */
1b300 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e  .  int isMutexIn
1b310 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
1b320 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
1b330 65 72 20 6d 75 74 65 78 65 73 20 61 72 65 20 69  er mutexes are i
1b340 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
1b350 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74  int isMallocInit
1b360 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1b370 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1b380 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
1b390 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
1b3a0 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20  sPCacheInit;    
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b3c0 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
1b3d0 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
1b3e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
1b3f0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
1b400 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
1b410 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
1b420 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
1b430 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
1b440 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
1b450 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b460 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
1b470 4d 75 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20  Mutex */.  void 
1b480 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e  (*xLog)(void*,in
1b490 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20  t,const char*); 
1b4a0 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20  /* Function for 
1b4b0 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69  logging */.  voi
1b4c0 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20  d *pLogArg;     
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4e0 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
1b4f0 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f  ent to xLog() */
1b500 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
1b510 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
1b520 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
1b530 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
1b540 20 63 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66   calls */.#ifdef
1b550 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
1b560 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
1b570 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
1b580 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1b590 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
1b5a0 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
1b5b0 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 43 6f  dif.};../*.** Co
1b5c0 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
1b5d0 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
1b5e0 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
1b5f0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
1b600 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70  r {.  int (*xExp
1b610 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
1b620 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
1b630 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
1b640 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1b650 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
1b660 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
1b670 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
1b680 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
1b690 54 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  Ts */.  Parse *p
1b6a0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
1b6d0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 77  ext.  */.  int w
1b6e0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b710 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
1b720 20 20 75 38 20 62 53 65 6c 65 63 74 44 65 70 74    u8 bSelectDept
1b730 68 46 69 72 73 74 3b 20 20 20 20 20 20 20 20 20  hFirst;         
1b740 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1b750 6f 20 73 75 62 71 75 65 72 69 65 73 20 66 69 72  o subqueries fir
1b760 73 74 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  st */.  union { 
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
1b7a0 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
1b7b0 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
1b7c0 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b7e0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
1b7f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
1b830 6c 75 65 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  lue */.    SrcLi
1b840 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c        /* FROM cl
1b870 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  ause */.    stru
1b880 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72  ct SrcCount *pSr
1b890 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20  cCount;         
1b8a0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
1b8b0 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
1b8c0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d  nces */.  } u;.}
1b8d0 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
1b8e0 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
1b8f0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
1b900 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
1b910 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
1b920 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
1b930 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
1b940 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
1b950 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
1b960 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
1b970 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
1b980 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
1b990 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
1b9a0 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
1b9b0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
1b9c0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  );../*.** Return
1b9d0 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
1b9e0 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
1b9f0 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
1ba00 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
1ba10 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
1ba20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
1ba30 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
1ba40 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
1ba50 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
1ba60 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
1ba70 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
1ba80 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
1ba90 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
1baa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
1bab0 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
1bac0 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
1bad0 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
1bae0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
1baf0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
1bb00 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
1bb10 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
1bb20 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
1bb30 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
1bb40 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
1bb50 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
1bb60 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
1bb70 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
1bb80 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
1bbb0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbd0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
1bbe0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
1bbf0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
1bc00 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
1bc10 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
1bc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc40 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
1bc50 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
1bc60 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
1bc70 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
1bc80 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
1bc90 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
1bca0 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
1bcb0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
1bcc0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
1bcd0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
1bce0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
1bcf0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
1bd00 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
1bd10 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
1bd20 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
1bd30 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
1bd40 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
1bd50 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
1bd60 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
1bd70 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
1bd80 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
1bd90 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
1bda0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
1bdb0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
1bdc0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
1bdd0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
1bde0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
1bdf0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
1be00 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
1be10 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1be20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
1be30 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
1be40 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
1be50 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
1be60 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
1be70 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
1be80 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
1be90 5f 5f 29 0a 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  __).../*.** FTS4
1bea0 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
1beb0 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
1bec0 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
1bed0 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
1bee0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1bef0 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
1bf00 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
1bf10 77 65 20 61 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74  we also all.** t
1bf20 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
1bf30 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20 73  _FTS4 macro to s
1bf40 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 73 73  erve as an aliss
1bf50 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  e for SQLITE_ENA
1bf60 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
1bf70 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1bf80 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
1bf90 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1bfa0 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
1bfb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
1bfc0 42 4c 45 5f 46 54 53 33 0a 23 65 6e 64 69 66 0a  BLE_FTS3.#endif.
1bfd0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65  ./*.** The ctype
1bfe0 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e 65 65  .h header is nee
1bff0 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49  ded for non-ASCI
1c000 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69  I systems.  It i
1c010 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64  s also.** needed
1c020 20 62 79 20 46 54 53 33 20 77 68 65 6e 20 46 54   by FTS3 when FT
1c030 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69  S3 is included i
1c040 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69  n the amalgamati
1c050 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  on..*/.#if !defi
1c060 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49  ned(SQLITE_ASCII
1c070 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69  ) || \.    (defi
1c080 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
1c090 45 5f 46 54 53 33 29 20 26 26 20 64 65 66 69 6e  E_FTS3) && defin
1c0a0 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ed(SQLITE_AMALGA
1c0b0 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75  MATION)).# inclu
1c0c0 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e  de <ctype.h>.#en
1c0d0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
1c0e0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
1c0f0 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61  mimic the standa
1c100 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74  rd library funct
1c110 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a  ions toupper(),.
1c120 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20 69 73  ** isspace(), is
1c130 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74  alnum(), isdigit
1c140 28 29 20 61 6e 64 20 69 73 78 64 69 67 69 74 28  () and isxdigit(
1c150 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ), respectively.
1c160 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76   The.** sqlite v
1c170 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72  ersions only wor
1c180 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68 61 72  k for ASCII char
1c190 61 63 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65  acters, regardle
1c1a0 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f  ss of locale..*/
1c1b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41  .#ifdef SQLITE_A
1c1c0 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71  SCII.# define sq
1c1d0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
1c1e0 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43   ((x)&~(sqlite3C
1c1f0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
1c200 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 32 30  d char)(x)]&0x20
1c210 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1c220 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20  te3Isspace(x)   
1c230 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1c240 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1c250 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66  (x)]&0x01).# def
1c260 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
1c270 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  um(x)   (sqlite3
1c280 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1c290 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1c2a0 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  6).# define sqli
1c2b0 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1c2c0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1c2d0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1c2e0 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66  (x)]&0x02).# def
1c2f0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
1c300 69 74 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  it(x)   (sqlite3
1c310 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
1c320 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
1c330 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  4).# define sqli
1c340 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
1c350 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
1c360 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
1c370 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66  (x)]&0x08).# def
1c380 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1c390 65 72 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  er(x)   (sqlite3
1c3a0 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e  UpperToLower[(un
1c3b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1c3c0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1c3d0 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
1c3e0 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
1c3f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1c400 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1c410 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
1c420 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
1c430 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
1c440 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
1c450 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
1c460 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
1c470 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
1c480 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
1c490 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
1c4a0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
1c4b0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
1c4c0 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
1c4d0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
1c4e0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
1c4f0 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
1c500 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
1c510 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1c520 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
1c530 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
1c540 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
1c550 61 72 29 28 78 29 29 0a 23 65 6e 64 69 66 0a 0a  ar)(x)).#endif..
1c560 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
1c570 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
1c580 65 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 73 71  es.*/.#define sq
1c590 6c 69 74 65 33 53 74 72 49 43 6d 70 20 73 71 6c  lite3StrICmp sql
1c5a0 69 74 65 33 5f 73 74 72 69 63 6d 70 0a 69 6e 74  ite3_stricmp.int
1c5b0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
1c5c0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
1c5d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1c5e0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
1c5f0 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
1c600 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
1c610 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
1c620 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
1c630 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c640 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
1c650 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
1c660 5a 65 72 6f 28 69 6e 74 29 3b 0a 76 6f 69 64 20  Zero(int);.void 
1c670 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
1c680 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 69  Zero(sqlite3*, i
1c690 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
1c6a0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
1c6b0 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
1c6c0 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72  ar *sqlite3DbStr
1c6d0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
1c6e0 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
1c6f0 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75  *sqlite3DbStrNDu
1c700 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
1c710 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   char*, int);.vo
1c720 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c  id *sqlite3Reall
1c730 6f 63 28 76 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a  oc(void*, int);.
1c740 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52  void *sqlite3DbR
1c750 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c  eallocOrFree(sql
1c760 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1c770 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
1c780 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c  te3DbRealloc(sql
1c790 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20  ite3 *, void *, 
1c7a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1c7b0 65 33 44 62 46 72 65 65 28 73 71 6c 69 74 65 33  e3DbFree(sqlite3
1c7c0 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  *, void*);.int s
1c7d0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
1c7e0 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  (void*);.int sql
1c7f0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65  ite3DbMallocSize
1c800 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
1c810 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
1c820 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e  ScratchMalloc(in
1c830 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1c840 53 63 72 61 74 63 68 46 72 65 65 28 76 6f 69 64  ScratchFree(void
1c850 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  *);.void *sqlite
1c860 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29  3PageMalloc(int)
1c870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  ;.void sqlite3Pa
1c880 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  geFree(void*);.v
1c890 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65  oid sqlite3MemSe
1c8a0 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a  tDefault(void);.
1c8b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
1c8c0 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
1c8d0 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
1c8e0 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 69  id (*)(void));.i
1c8f0 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
1c900 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
1c910 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
1c920 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
1c930 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
1c940 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
1c950 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
1c960 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
1c970 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
1c980 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
1c990 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
1c9a0 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
1c9b0 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
1c9c0 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
1c9d0 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
1c9e0 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
1c9f0 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
1ca00 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
1ca10 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
1ca20 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
1ca30 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
1ca40 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
1ca50 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
1ca60 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
1ca70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
1ca80 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
1ca90 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
1caa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1cab0 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
1cac0 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
1cad0 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
1cae0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
1caf0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 0a  ree(D,P)       .
1cb00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1cb10 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
1cb20 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
1cb30 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
1cb40 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
1cb50 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
1cb60 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
1cb70 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
1cb80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1cb90 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
1cba0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1cbb0 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
1cbc0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1cbd0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
1cbe0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
1cbf0 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
1cc00 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
1cc10 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  id);.#endif.#ifd
1cc20 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1cc30 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
1cc40 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
1cc50 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
1cc60 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
1cc70 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
1cc80 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
1cc90 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
1cca0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
1ccb0 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
1ccc0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
1ccd0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
1cce0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
1ccf0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
1cd00 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
1cd10 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
1cd20 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
1cd30 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
1cd40 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
1cd50 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
1cd60 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
1cd70 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 75  int sqlite3Statu
1cd80 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
1cd90 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 41  d sqlite3StatusA
1cda0 64 64 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  dd(int, int);.vo
1cdb0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
1cdc0 53 65 74 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  Set(int, int);..
1cdd0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1cde0 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1cdf0 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
1ce00 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
1ce10 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
1ce20 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
1ce30 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
1ce40 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
1ce50 72 41 63 63 75 6d 2a 2c 20 69 6e 74 2c 20 63 6f  rAccum*, int, co
1ce60 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69  nst char*, va_li
1ce70 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
1ce80 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 76  ITE_OMIT_TRACE.v
1ce90 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
1cea0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
1ceb0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
1cec0 0a 23 65 6e 64 69 66 0a 63 68 61 72 20 2a 73 71  .#endif.char *sq
1ced0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
1cee0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
1cef0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
1cf00 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
1cf10 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
1cf20 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 63  ar*, va_list);.c
1cf30 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 41 70 70  har *sqlite3MApp
1cf40 65 6e 64 66 28 73 71 6c 69 74 65 33 2a 2c 63 68  endf(sqlite3*,ch
1cf50 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
1cf60 2e 2e 2e 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ...);.#if define
1cf70 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
1cf80 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
1cf90 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73  _DEBUG).  void s
1cfa0 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
1cfb0 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  f(const char*, .
1cfc0 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20  ..);.#endif.#if 
1cfd0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
1cfe0 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c  EST).  void *sql
1cff0 69 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74  ite3TestTextToPt
1d000 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  r(const char*);.
1d010 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 75 74 70 75  #endif../* Outpu
1d020 74 20 66 6f 72 6d 61 74 74 69 6e 67 20 66 6f 72  t formatting for
1d030 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
1d040 5f 45 58 50 4c 41 49 4e 20 2a 2f 0a 23 69 66 20  _EXPLAIN */.#if 
1d050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
1d060 4e 41 42 4c 45 5f 54 52 45 45 5f 45 58 50 4c 41  NABLE_TREE_EXPLA
1d070 49 4e 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IN).  void sqlit
1d080 65 33 45 78 70 6c 61 69 6e 42 65 67 69 6e 28 56  e3ExplainBegin(V
1d090 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  dbe*);.  void sq
1d0a0 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 72 69 6e  lite3ExplainPrin
1d0b0 74 66 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  tf(Vdbe*, const 
1d0c0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 20 20 76  char*, ...);.  v
1d0d0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d0e0 69 6e 4e 4c 28 56 64 62 65 2a 29 3b 0a 20 20 76  inNL(Vdbe*);.  v
1d0f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61  oid sqlite3Expla
1d100 69 6e 50 75 73 68 28 56 64 62 65 2a 29 3b 0a 20  inPush(Vdbe*);. 
1d110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1d120 6c 61 69 6e 50 6f 70 28 56 64 62 65 2a 29 3b 0a  lainPop(Vdbe*);.
1d130 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78    void sqlite3Ex
1d140 70 6c 61 69 6e 46 69 6e 69 73 68 28 56 64 62 65  plainFinish(Vdbe
1d150 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
1d160 65 33 45 78 70 6c 61 69 6e 53 65 6c 65 63 74 28  e3ExplainSelect(
1d170 56 64 62 65 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Vdbe*, Select*);
1d180 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45  .  void sqlite3E
1d190 78 70 6c 61 69 6e 45 78 70 72 28 56 64 62 65 2a  xplainExpr(Vdbe*
1d1a0 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64  , Expr*);.  void
1d1b0 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 45   sqlite3ExplainE
1d1c0 78 70 72 4c 69 73 74 28 56 64 62 65 2a 2c 20 45  xprList(Vdbe*, E
1d1d0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 63 6f 6e  xprList*);.  con
1d1e0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
1d1f0 56 64 62 65 45 78 70 6c 61 6e 61 74 69 6f 6e 28  VdbeExplanation(
1d200 56 64 62 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Vdbe*);.#else.# 
1d210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d220 70 6c 61 69 6e 42 65 67 69 6e 28 58 29 0a 23 20  plainBegin(X).# 
1d230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
1d240 70 6c 61 69 6e 53 65 6c 65 63 74 28 41 2c 42 29  plainSelect(A,B)
1d250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1d260 33 45 78 70 6c 61 69 6e 45 78 70 72 28 41 2c 42  3ExplainExpr(A,B
1d270 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1d280 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69 73  e3ExplainExprLis
1d290 74 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  t(A,B).# define 
1d2a0 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 46 69  sqlite3ExplainFi
1d2b0 6e 69 73 68 28 58 29 0a 23 20 64 65 66 69 6e 65  nish(X).# define
1d2c0 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 6c   sqlite3VdbeExpl
1d2d0 61 6e 61 74 69 6f 6e 28 58 29 20 30 0a 23 65 6e  anation(X) 0.#en
1d2e0 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
1d2f0 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
1d300 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
1d310 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1d320 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
1d330 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
1d340 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
1d350 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 71  ;.int sqlite3Deq
1d360 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 69 6e 74  uote(char*);.int
1d370 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
1d380 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
1d390 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
1d3a0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
1d3b0 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
1d3c0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
1d3d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d3e0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
1d3f0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
1d400 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
1d410 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
1d420 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
1d430 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
1d440 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
1d450 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
1d460 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
1d470 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
1d480 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
1d490 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
1d4a0 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
1d4b0 72 73 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  rse*);.Expr *sql
1d4c0 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
1d4d0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1d4e0 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
1d4f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
1d500 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
1d510 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
1d520 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
1d530 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
1d540 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
1d550 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
1d560 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
1d570 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
1d580 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
1d590 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
1d5a0 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33  3ExprAnd(sqlite3
1d5b0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  *,Expr*, Expr*);
1d5c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
1d5d0 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65  prFunction(Parse
1d5e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b  *,ExprList*, Tok
1d5f0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
1d600 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e  e3ExprAssignVarN
1d610 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78  umber(Parse*, Ex
1d620 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1d630 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
1d640 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
1d650 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
1d660 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
1d670 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1d680 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
1d690 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
1d6a0 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
1d6b0 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
1d6c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
1d6d0 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
1d6e0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
1d6f0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
1d700 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
1d710 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
1d720 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
1d730 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69  sqlite3Init(sqli
1d740 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69  te3*, char**);.i
1d750 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  nt sqlite3InitCa
1d760 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e  llback(void*, in
1d770 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a  t, char**, char*
1d780 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
1d790 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f  Pragma(Parse*,To
1d7a0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
1d7b0 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
1d7c0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
1d7d0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
1d7e0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1d7f0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
1d800 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
1d810 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1d820 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
1d830 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
1d840 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1d850 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
1d860 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1d870 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
1d880 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
1d890 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
1d8a0 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
1d8b0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
1d8c0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
1d8d0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
1d8e0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
1d8f0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
1d900 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
1d910 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
1d920 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
1d930 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
1d940 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
1d950 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
1d960 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
1d970 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  t,int,int);.void
1d980 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
1d990 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  n(Parse*,Token*)
1d9a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1d9b0 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
1d9c0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1d9d0 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
1d9e0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
1d9f0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
1da00 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1da10 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
1da20 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
1da30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
1da40 64 64 43 6f 6c 75 6d 6e 54 79 70 65 28 50 61 72  ddColumnType(Par
1da50 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1da60 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
1da70 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
1da80 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
1da90 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
1daa0 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
1dab0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1dac0 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
1dad0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
1dae0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
1daf0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
1db00 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
1db10 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
1db20 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
1db40 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
1db50 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
1db60 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
1db70 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
1db80 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
1db90 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 4f  int sqlite3CodeO
1dba0 6e 63 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 42  nce(Parse *);..B
1dbb0 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69  itvec *sqlite3Bi
1dbc0 74 76 65 63 43 72 65 61 74 65 28 75 33 32 29 3b  tvecCreate(u32);
1dbd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1dbe0 65 63 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20  ecTest(Bitvec*, 
1dbf0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
1dc00 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
1dc10 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
1dc20 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
1dc30 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
1dc40 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
1dc50 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
1dc60 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
1dc70 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
1dc80 65 28 42 69 74 76 65 63 2a 29 3b 0a 69 6e 74 20  e(Bitvec*);.int 
1dc90 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
1dca0 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
1dcb0 2a 29 3b 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  *);..RowSet *sql
1dcc0 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
1dcd0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
1dce0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
1dcf0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
1dd00 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
1dd10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
1dd20 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
1dd30 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
1dd40 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
1dd50 6f 77 53 65 74 2a 2c 20 75 38 20 69 42 61 74 63  owSet*, u8 iBatc
1dd60 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
1dd70 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
1dd80 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
1dd90 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
1dda0 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
1ddb0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
1ddc0 6e 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69  n*,Select*,int,i
1ddd0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
1dde0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
1ddf0 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65 64  IEW) || !defined
1de00 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
1de10 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74  TUALTABLE).  int
1de20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
1de30 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65  olumnNames(Parse
1de40 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
1de50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1de60 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
1de70 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64 69  mes(A,B) 0.#endi
1de80 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  f..void sqlite3D
1de90 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
1dea0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
1deb0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1dec0 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28  e3CodeDropTable(
1ded0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
1dee0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
1def0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62  sqlite3DeleteTab
1df00 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
1df10 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  le*);.#ifndef SQ
1df20 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1df30 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73  CREMENT.  void s
1df40 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
1df50 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a  entBegin(Parse *
1df60 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20  pParse);.  void 
1df70 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
1df80 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70  mentEnd(Parse *p
1df90 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20  Parse);.#else.# 
1dfa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
1dfb0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
1dfc0 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (X).# define sql
1dfd0 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
1dfe0 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 69  tEnd(X).#endif.i
1dff0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 43 6f  nt sqlite3CodeCo
1e000 72 6f 75 74 69 6e 65 28 50 61 72 73 65 2a 2c 20  routine(Parse*, 
1e010 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
1e020 65 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  est*);.void sqli
1e030 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
1e040 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
1e050 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
1e060 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
1e070 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
1e080 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
1e090 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
1e0a0 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
1e0b0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
1e0c0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
1e0d0 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
1e0e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
1e0f0 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
1e100 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
1e110 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
1e120 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
1e130 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
1e140 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
1e150 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
1e160 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
1e170 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
1e180 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
1e190 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
1e1a0 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
1e1b0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
1e1c0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
1e1d0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
1e200 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
1e210 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
1e220 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
1e230 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
1e240 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
1e250 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71  Token *);.int sq
1e260 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f  lite3IndexedByLo
1e270 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74  okup(Parse *, st
1e280 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
1e290 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  m *);.void sqlit
1e2a0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
1e2b0 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29  inType(SrcList*)
1e2c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
1e2d0 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
1e2e0 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
1e2f0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
1e300 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73  e3IdListDelete(s
1e310 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
1e320 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
1e330 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  rcListDelete(sql
1e340 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ite3*, SrcList*)
1e350 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
1e360 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a  AllocateIndexObj
1e370 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36  ect(sqlite3*,i16
1e380 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e  ,int,char**);.In
1e390 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
1e3a0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
1e3b0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
1e3c0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
1e3d0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3f0 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
1e400 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1e410 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61  ite3DropIndex(Pa
1e420 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
1e430 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1e440 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
1e450 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
1e460 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  est*);.Select *s
1e470 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28  qlite3SelectNew(
1e480 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
1e490 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
1e4a0 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ExprList*,.     
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69      Expr*,ExprLi
1e4d0 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78  st*,u16,Expr*,Ex
1e4e0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
1e4f0 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
1e500 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
1e510 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
1e520 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
1e530 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
1e540 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
1e550 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
1e560 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
1e570 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
1e580 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
1e590 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
1e5a0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
1e5b0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1e5c0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
1e5d0 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
1e5e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1e5f0 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
1e600 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
1e610 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
1e620 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e630 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
1e640 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  *,char*);.#endif
1e650 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
1e660 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20  eteFrom(Parse*, 
1e670 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  SrcList*, Expr*)
1e680 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
1e690 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
1e6a0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
1e6b0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57  , Expr*, int);.W
1e6c0 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65  hereInfo *sqlite
1e6d0 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73  3WhereBegin(Pars
1e6e0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
1e6f0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
1e700 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a  List*,u16,int);.
1e710 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
1e720 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
1e730 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65  ;.u64 sqlite3Whe
1e740 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
1e750 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
1e760 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1e770 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
1e780 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
1e790 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
1e7a0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
1e7b0 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
1e7c0 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
1e7d0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
1e7e0 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
1e7f0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
1e800 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
1e810 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
1e820 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
1e830 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
1e840 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
1e850 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
1e860 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
1e870 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
1e880 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
1e890 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
1e8a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
1e8b0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1e8c0 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
1e8d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
1e8e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1e8f0 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c 20  heStore(Parse*, 
1e900 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
1e910 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1e920 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65 2a  CachePush(Parse*
1e930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1e940 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72 73  xprCachePop(Pars
1e950 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
1e960 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
1e970 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
1e980 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
1e990 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
1e9a0 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
1e9b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
1e9c0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
1e9d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
1e9e0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
1e9f0 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
1ea00 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
1ea10 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
1ea20 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
1ea30 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
1ea40 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
1ea50 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
1ea60 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
1ea70 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
1ea80 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
1ea90 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
1eaa0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
1eab0 6f 6e 73 74 61 6e 74 73 28 50 61 72 73 65 2a 2c  onstants(Parse*,
1eac0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1ead0 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70 72  ite3ExprCodeExpr
1eae0 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70  List(Parse*, Exp
1eaf0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
1eb00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1eb10 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
1eb20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
1eb30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1eb40 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
1eb50 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
1eb60 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
1eb70 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
1eb80 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1eb90 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
1eba0 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
1ebb0 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
1ebc0 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f  e*,int isView,co
1ebd0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
1ebe0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
1ebf0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
1ec00 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e  leItem(Parse*,in
1ec10 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20  t isView,struct 
1ec20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
1ec30 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
1ec40 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
1ec50 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
1ec60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
1ec70 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
1ec80 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
1ec90 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
1eca0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
1ecb0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
1ecc0 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
1ecd0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
1ece0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
1ecf0 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b  3Vacuum(Parse*);
1ed00 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
1ed10 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
1ed20 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73  lite3*);.char *s
1ed30 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
1ed40 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
1ed50 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
1ed60 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78  e3ExprCompare(Ex
1ed70 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
1ed80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1ed90 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
1eda0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
1edb0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
1edc0 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
1edd0 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  xpr(Expr*, Expr*
1ede0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
1edf0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
1ee00 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
1ee10 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
1ee20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1ee30 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
1ee40 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
1ee50 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
1ee60 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
1ee70 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
1ee80 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
1ee90 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
1eea0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1eeb0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
1eec0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
1eed0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
1eee0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
1eef0 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 65   sqlite3PrngRese
1ef00 74 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  tState(void);.vo
1ef10 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1ef20 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
1ef30 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
1ef40 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
1ef50 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
1ef60 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
1ef70 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
1ef80 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
1ef90 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
1efa0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
1efb0 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
1efc0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1efd0 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
1efe0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
1eff0 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
1f000 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
1f010 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
1f020 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
1f030 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
1f040 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
1f050 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
1f060 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
1f070 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
1f080 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
1f090 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
1f0a0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
1f0b0 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
1f0c0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
1f0d0 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
1f0e0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
1f0f0 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
1f100 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29  rFunction(Expr*)
1f110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
1f120 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
1f130 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f140 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
1f150 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
1f160 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
1f170 43 6f 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56  CodeIsNullJump(V
1f180 64 62 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  dbe*, const Expr
1f190 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  *, int, int);.in
1f1a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
1f1b0 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
1f1c0 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
1f1d0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
1f1e0 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
1f1f0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
1f200 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
1f210 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62  elete(Parse*,Tab
1f220 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74  le*,Trigger*,int
1f230 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c  ,int,int,i16,u8,
1f240 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
1f250 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
1f260 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
1f270 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
1f280 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
1f290 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
1f2a0 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64  xKey(Parse*, Ind
1f2b0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
1f2c0 6e 74 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20  nt, int*);.void 
1f2d0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
1f2e0 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
1f2f0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
1f300 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
1f340 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64  ,int,int*);.void
1f350 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
1f360 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
1f370 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
1f380 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
1f390 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
1f3a0 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
1f3b0 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
1f3c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
1f3d0 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
1f3e0 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
1f3f0 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
1f400 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
1f410 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
1f420 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
1f430 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
1f440 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
1f450 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
1f460 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
1f470 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
1f480 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  , int);.Expr *sq
1f490 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
1f4a0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
1f4b0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
1f4c0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
1f4d0 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
1f4e0 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
1f4f0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
1f500 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
1f510 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
1f520 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
1f530 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
1f540 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
1f550 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
1f560 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
1f570 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1f580 74 65 33 46 75 6e 63 44 65 66 49 6e 73 65 72 74  te3FuncDefInsert
1f590 28 46 75 6e 63 44 65 66 48 61 73 68 2a 2c 20 46  (FuncDefHash*, F
1f5a0 75 6e 63 44 65 66 2a 29 3b 0a 46 75 6e 63 44 65  uncDef*);.FuncDe
1f5b0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
1f5c0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
1f5d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
1f5e0 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
1f5f0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1f600 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
1f610 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
1f620 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
1f630 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
1f640 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
1f650 6c 69 74 65 33 52 65 67 69 73 74 65 72 47 6c 6f  lite3RegisterGlo
1f660 62 61 6c 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  balFunctions(voi
1f670 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
1f680 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c  afetyCheckOk(sql
1f690 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
1f6a0 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69  te3SafetyCheckSi
1f6b0 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29  ckOrOk(sqlite3*)
1f6c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68  ;.void sqlite3Ch
1f6d0 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65  angeCookie(Parse
1f6e0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  *, int);..#if !d
1f6f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1f700 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66  IT_VIEW) && !def
1f710 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1f720 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73  _TRIGGER).void s
1f730 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a  qlite3Materializ
1f740 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61  eView(Parse*, Ta
1f750 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
1f760 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
1f770 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
1f780 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71  RIGGER.  void sq
1f790 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65  lite3BeginTrigge
1f7a0 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  r(Parse*, Token*
1f7b0 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Token*,int,int,
1f7c0 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  IdList*,SrcList*
1f7d0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
1f7f0 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  r*,int, int);.  
1f800 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69  void sqlite3Fini
1f810 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  shTrigger(Parse*
1f820 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20  , TriggerStep*, 
1f830 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20  Token*);.  void 
1f840 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
1f850 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  er(Parse*, SrcLi
1f860 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  st*, int);.  voi
1f870 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
1f880 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20  ggerPtr(Parse*, 
1f890 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69  Trigger*);.  Tri
1f8a0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
1f8b0 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65  ggersExist(Parse
1f8c0 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c   *, Table*, int,
1f8d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20   ExprList*, int 
1f8e0 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67  *pMask);.  Trigg
1f8f0 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
1f900 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20  erList(Parse *, 
1f910 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64  Table *);.  void
1f920 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1f930 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
1f940 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45  rigger *, int, E
1f950 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54  xprList*, int, T
1f960 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20  able *,.        
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e      int, int, in
1f990 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1f9a0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
1f9b0 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20  Direct(Parse *, 
1f9c0 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65  Trigger *, Table
1f9d0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e   *, int, int, in
1f9e0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
1f9f0 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61  eViewTriggers(Pa
1fa00 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
1fa10 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  pr*, int, ExprLi
1fa20 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  st*);.  void sql
1fa30 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
1fa40 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20  rStep(sqlite3*, 
1fa50 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20  TriggerStep*);. 
1fa60 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
1fa70 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65  lite3TriggerSele
1fa80 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  ctStep(sqlite3*,
1fa90 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67  Select*);.  Trig
1faa0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1fab0 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65  TriggerInsertSte
1fac0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1fad0 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20  *, IdList*,.    
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 20 20 20 20 45 78 70 72 4c 69 73 74 2a 2c 53 65      ExprList*,Se
1fb10 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
1fb20 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
1fb30 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
1fb40 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
1fb50 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
1fb60 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
1fb70 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
1fb80 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
1fb90 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
1fba0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
1fbb0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
1fbc0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
1fbd0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
1fbe0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
1fbf0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
1fc00 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
1fc10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
1fc20 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
1fc30 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
1fc40 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
1fc50 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
1fc60 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
1fc70 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
1fc80 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
1fc90 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
1fca0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
1fcb0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
1fcc0 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
1fcd0 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
1fce0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fcf0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
1fd00 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
1fd10 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
1fd20 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
1fd30 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
1fd40 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
1fd50 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
1fd60 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
1fd70 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
1fd80 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
1fd90 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
1fda0 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
1fdb0 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
1fdc0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
1fdd0 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
1fde0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
1fdf0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
1fe00 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1fe10 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
1fe20 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
1fe30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
1fe40 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
1fe50 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
1fe60 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
1fe70 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
1fe80 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
1fe90 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
1fea0 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
1feb0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
1fec0 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
1fed0 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
1fee0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fef0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
1ff00 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
1ff10 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
1ff20 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
1ff30 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
1ff40 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
1ff50 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
1ff60 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
1ff70 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
1ff80 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1ff90 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
1ffa0 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
1ffb0 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
1ffc0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
1ffd0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
1ffe0 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
1fff0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
20000 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
20010 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
20020 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
20030 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
20040 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
20050 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
20060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
20070 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
20080 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
20090 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
200a0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
200b0 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
200c0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
200d0 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
200e0 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
200f0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
20100 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
20110 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
20120 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
20130 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
20140 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
20150 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
20160 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
20170 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
20180 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
20190 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
201a0 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
201b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
201c0 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
201d0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
201e0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
201f0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
20200 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
20210 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
20220 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
20230 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
20240 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
20250 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
20260 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
20270 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
20280 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
20290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
202a0 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
202b0 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
202c0 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
202d0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
202e0 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
202f0 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
20300 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
20310 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
20320 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
20330 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
20340 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
20350 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
20360 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
20370 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
20380 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
20390 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
203a0 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
203b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
203c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
203d0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
203e0 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
203f0 65 29 3b 0a 23 65 6e 64 69 66 0a 75 36 34 20 73  e);.#endif.u64 s
20400 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
20410 74 28 4c 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a  t(LogEst);../*.*
20420 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
20430 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
20440 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
20450 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
20460 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
20470 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
20480 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
20490 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
204a0 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
204b0 20 66 69 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f   file.  Code sho
204c0 75 6c 64 20 75 73 65 20 74 68 65 20 4d 41 43 52  uld use the MACR
204d0 4f 20 66 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61  O forms below, a
204e0 73 20 74 68 65 20 56 61 72 69 6e 74 33 32 20 76  s the Varint32 v
204f0 65 72 73 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63  ersions.** are c
20500 6f 64 65 64 20 74 6f 20 61 73 73 75 6d 65 20 74  oded to assume t
20510 68 65 20 73 69 6e 67 6c 65 20 62 79 74 65 20 63  he single byte c
20520 61 73 65 20 69 73 20 61 6c 72 65 61 64 79 20 68  ase is already h
20530 61 6e 64 6c 65 64 20 28 77 68 69 63 68 20 0a 2a  andled (which .*
20540 2a 20 74 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d  * the MACRO form
20550 20 64 6f 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73   does)..*/.int s
20560 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
20570 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
20580 75 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u64);.int sqlite
20590 33 50 75 74 56 61 72 69 6e 74 33 32 28 75 6e 73  3PutVarint32(uns
205a0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 33 32  igned char*, u32
205b0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
205c0 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
205d0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
205e0 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
205f0 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
20600 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
20610 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
20620 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
20630 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
20640 68 65 20 68 65 61 64 65 72 20 6f 66 20 61 20 72  he header of a r
20650 65 63 6f 72 64 20 63 6f 6e 73 69 73 74 73 20 6f  ecord consists o
20660 66 20 61 20 73 65 71 75 65 6e 63 65 20 76 61 72  f a sequence var
20670 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
20680 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20  egers..** These 
20690 69 6e 74 65 67 65 72 73 20 61 72 65 20 61 6c 6d  integers are alm
206a0 6f 73 74 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c  ost always small
206b0 20 61 6e 64 20 61 72 65 20 65 6e 63 6f 64 65 64   and are encoded
206c0 20 61 73 20 61 20 73 69 6e 67 6c 65 20 62 79 74   as a single byt
206d0 65 2e 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  e..** The follow
206e0 69 6e 67 20 6d 61 63 72 6f 73 20 74 61 6b 65 20  ing macros take 
206f0 61 64 76 61 6e 74 61 67 65 20 74 68 69 73 20 66  advantage this f
20700 61 63 74 20 74 6f 20 70 72 6f 76 69 64 65 20 61  act to provide a
20710 20 66 61 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20   fast encode.** 
20720 61 6e 64 20 64 65 63 6f 64 65 20 6f 66 20 74 68  and decode of th
20730 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 61 20  e integers in a 
20740 72 65 63 6f 72 64 20 68 65 61 64 65 72 2e 20 20  record header.  
20750 49 74 20 69 73 20 66 61 73 74 65 72 20 66 6f 72  It is faster for
20760 20 74 68 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63   the common.** c
20770 61 73 65 20 77 68 65 72 65 20 74 68 65 20 69 6e  ase where the in
20780 74 65 67 65 72 20 69 73 20 61 20 73 69 6e 67 6c  teger is a singl
20790 65 20 62 79 74 65 2e 20 20 49 74 20 69 73 20 61  e byte.  It is a
207a0 20 6c 69 74 74 6c 65 20 73 6c 6f 77 65 72 20 77   little slower w
207b0 68 65 6e 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  hen the.** integ
207c0 65 72 20 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72  er is two or mor
207d0 65 20 62 79 74 65 73 2e 20 20 42 75 74 20 6f 76  e bytes.  But ov
207e0 65 72 61 6c 6c 20 69 74 20 69 73 20 66 61 73 74  erall it is fast
207f0 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  er..**.** The fo
20800 6c 6c 6f 77 69 6e 67 20 65 78 70 72 65 73 73 69  llowing expressi
20810 6f 6e 73 20 61 72 65 20 65 71 75 69 76 61 6c 65  ons are equivale
20820 6e 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20  nt:.**.**     x 
20830 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  = sqlite3GetVari
20840 6e 74 33 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a  nt32( A, &B );.*
20850 2a 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65  *     x = sqlite
20860 33 50 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c  3PutVarint32( A,
20870 20 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20   B );.**.**     
20880 78 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  x = getVarint32(
20890 20 41 2c 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20   A, B );.**     
208a0 78 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  x = putVarint32(
208b0 20 41 2c 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23   A, B );.**.*/.#
208c0 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74  define getVarint
208d0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
208e0 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30  )((*(A)<(u8)0x80
208f0 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29  )?((B)=(u32)*(A)
20900 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61  ),1:sqlite3GetVa
20910 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20  rint32((A),(u32 
20920 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65  *)&(B))).#define
20930 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42   putVarint32(A,B
20940 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33  )  \.  (u8)(((u3
20950 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29  2)(B)<(u32)0x80)
20960 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64  ?(*(A)=(unsigned
20970 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20   char)(B)),1:\. 
20980 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
20990 74 33 32 28 28 41 29 2c 28 42 29 29 29 0a 23 64  t32((A),(B))).#d
209a0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
209b0 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
209c0 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
209d0 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
209e0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
209f0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
20a00 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
20a10 56 64 62 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29  Vdbe *, Index *)
20a20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
20a30 62 6c 65 41 66 66 69 6e 69 74 79 53 74 72 28 56  bleAffinityStr(V
20a40 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  dbe *, Table *);
20a50 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
20a60 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
20a70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
20a80 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
20a90 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
20aa0 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
20ab0 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
20ac0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 45 78  ;.char sqlite3Ex
20ad0 70 72 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  prAffinity(Expr 
20ae0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
20af0 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74  ite3Atoi64(const
20b00 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e   char*, i64*, in
20b10 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
20b20 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
20b30 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
20b40 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20  har*,...);.void 
20b50 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
20b60 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
20b70 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
20b80 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
20b90 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
20ba0 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
20bb0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
20bc0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
20bd0 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
20be0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
20bf0 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
20c00 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c  (SQLITE_TEST) ||
20c10 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
20c20 51 4c 49 54 45 5f 44 45 42 55 47 5f 4f 53 5f 54  QLITE_DEBUG_OS_T
20c30 52 41 43 45 29 0a 63 6f 6e 73 74 20 63 68 61 72  RACE).const char
20c40 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65   *sqlite3ErrName
20c50 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63  (int);.#endif..c
20c60 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
20c70 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69  e3ErrStr(int);.i
20c80 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  nt sqlite3ReadSc
20c90 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  hema(Parse *pPar
20ca0 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  se);.CollSeq *sq
20cb0 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71  lite3FindCollSeq
20cc0 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63  (sqlite3*,u8 enc
20cd0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  , const char*,in
20ce0 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  t);.CollSeq *sql
20cf0 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65  ite3LocateCollSe
20d00 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
20d10 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d   const char*zNam
20d20 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
20d30 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28  ite3ExprCollSeq(
20d40 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
20d50 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
20d60 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
20d70 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61  dCollateToken(Pa
20d80 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
20d90 72 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70  r*, Token*);.Exp
20da0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64  r *sqlite3ExprAd
20db0 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50  dCollateString(P
20dc0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73  arse*,Expr*,cons
20dd0 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a  t char*);.Expr *
20de0 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43  sqlite3ExprSkipC
20df0 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69  ollate(Expr*);.i
20e00 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43  nt sqlite3CheckC
20e10 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
20e20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20  CollSeq *);.int 
20e30 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65  sqlite3CheckObje
20e40 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  ctName(Parse *, 
20e50 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76  const char *);.v
20e60 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53  oid sqlite3VdbeS
20e70 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  etChanges(sqlite
20e80 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  3 *, int);.int s
20e90 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69  qlite3AddInt64(i
20ea0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
20eb0 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36  lite3SubInt64(i6
20ec0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
20ed0 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34  ite3MulInt64(i64
20ee0 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
20ef0 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29  te3AbsInt32(int)
20f00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
20f10 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53  ENABLE_8_3_NAMES
20f20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c  .void sqlite3Fil
20f30 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63  eSuffix3(const c
20f40 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65  har*, char*);.#e
20f50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
20f60 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
20f70 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73  X,Y).#endif.u8 s
20f80 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
20f90 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69  (const char *z,i
20fa0 6e 74 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  nt);..const void
20fb0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
20fc0 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
20fd0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
20fe0 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
20ff0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
21000 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
21010 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
21020 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
21030 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
21040 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
21050 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
21060 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
21070 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
21080 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
21090 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
210a0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
210b0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
210c0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
210d0 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
210e0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
210f0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
21100 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
21110 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
21120 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
21130 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
21140 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
21150 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
21160 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
21170 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
21180 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
21190 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
211a0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
211b0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
211c0 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
211d0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
211e0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
211f0 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
21200 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
21210 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
21220 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
21230 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
21240 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
21250 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
21260 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
21270 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
21280 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
21290 57 53 44 20 46 75 6e 63 44 65 66 48 61 73 68 20  WSD FuncDefHash 
212a0 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 46 75 6e  sqlite3GlobalFun
212b0 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
212c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
212d0 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
212e0 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
212f0 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
21300 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
21310 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
21320 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
21330 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
21340 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
21350 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
21360 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
21370 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
21380 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
21390 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
213a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
213b0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
213c0 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
213d0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
213e0 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
213f0 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
21400 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
21410 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
21420 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
21430 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
21440 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
21450 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
21460 73 65 6c 65 63 74 28 50 61 72 73 65 20 2a 2c 20  select(Parse *, 
21470 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
21480 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21490 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
214a0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
214b0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
214c0 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
214d0 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
214e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
214f0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
21500 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
21510 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
21520 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
21530 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
21540 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
21550 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
21560 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
21570 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
21580 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
21590 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
215a0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
215b0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
215c0 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
215d0 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
215e0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
215f0 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
21600 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
21610 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
21620 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
21630 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
21640 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
21650 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
21660 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
21670 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
21680 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
21690 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
216a0 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
216b0 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
216c0 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
216d0 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
216e0 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
216f0 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
21700 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
21710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
21720 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
21730 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
21740 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
21750 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
21760 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
21770 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
21780 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
21790 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
217a0 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
217b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
217c0 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
217d0 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
217e0 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
217f0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
21800 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
21810 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
21820 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
21830 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
21840 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
21850 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
21860 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
21870 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
21880 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
21890 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
218a0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
218b0 74 65 33 4d 69 6e 69 6d 75 6d 46 69 6c 65 46 6f  te3MinimumFileFo
218c0 72 6d 61 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  rmat(Parse*, int
218d0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
218e0 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28  ite3SchemaClear(
218f0 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20  void *);.Schema 
21900 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65  *sqlite3SchemaGe
21910 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72  t(sqlite3 *, Btr
21920 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ee *);.int sqlit
21930 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28  e3SchemaToIndex(
21940 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68  sqlite3 *db, Sch
21950 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  ema *);.KeyInfo 
21960 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41  *sqlite3KeyInfoA
21970 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
21980 74 2c 69 6e 74 29 3b 0a 4b 65 79 49 6e 66 6f 20  t,int);.KeyInfo 
21990 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79  *sqlite3IndexKey
219a0 69 6e 66 6f 28 50 61 72 73 65 20 2a 2c 20 49 6e  info(Parse *, In
219b0 64 65 78 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  dex *);.int sqli
219c0 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71  te3CreateFunc(sq
219d0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
219e0 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  har *, int, int,
219f0 20 76 6f 69 64 20 2a 2c 20 0a 20 20 76 6f 69 64   void *, .  void
21a00 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
21a10 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
21a20 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
21a30 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
21a40 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
21a50 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
21a60 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
21a70 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
21a80 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
21a90 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 69 6e 74  estructor.);.int
21aa0 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
21ab0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
21ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
21ad0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
21ae0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
21af0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
21b00 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 68  it(StrAccum*, ch
21b10 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
21b20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
21b30 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
21b40 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
21b50 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21b60 74 65 33 41 70 70 65 6e 64 53 70 61 63 65 28 53  te3AppendSpace(S
21b70 74 72 41 63 63 75 6d 2a 2c 69 6e 74 29 3b 0a 63  trAccum*,int);.c
21b80 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
21b90 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
21ba0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
21bb0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
21bc0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
21bd0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
21be0 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
21bf0 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
21c00 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
21c10 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
21c20 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
21c30 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
21c40 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
21c50 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
21c60 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
21c70 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
21c80 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
21c90 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
21ca0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 64 65 66  t u8 *);..#ifdef
21cb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
21cc0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f  TAT3_OR_STAT4.vo
21cd0 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a  id sqlite3Analyz
21ce0 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
21cf0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61  ;.int sqlite3Sta
21d00 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28  t4ProbeSetValue(
21d10 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
21d20 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
21d30 78 70 72 2a 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a  xpr*,u8,int,int*
21d40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
21d50 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
21d60 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
21d70 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
21d80 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
21d90 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74  he LEMON-generat
21da0 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69  ed parser.*/.voi
21db0 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
21dc0 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 73  Alloc(void*(*)(s
21dd0 69 7a 65 5f 74 29 29 3b 0a 76 6f 69 64 20 73 71  ize_t));.void sq
21de0 6c 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28  lite3ParserFree(
21df0 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76  void*, void(*)(v
21e00 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
21e10 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
21e20 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
21e30 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
21e40 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
21e50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
21e60 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
21e70 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
21e80 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
21e90 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
21ea0 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
21eb0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
21ec0 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
21ed0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
21ee0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
21ef0 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
21f00 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
21f10 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
21f20 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
21f30 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
21f40 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
21f50 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
21f60 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
21f70 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
21f80 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
21f90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
21fa0 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
21fb0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
21fc0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
21fd0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
21fe0 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
21ff0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
22000 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
22010 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
22020 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
22030 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
22040 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
22050 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
22060 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
22070 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
22080 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
22090 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
220a0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
220b0 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
220c0 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
220d0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
220e0 20 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69   .#  define sqli
220f0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
22100 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
22110 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
22120 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
22130 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
22140 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
22150 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
22160 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
22170 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
22180 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
22190 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
221a0 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
221b0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
221c0 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
221d0 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
221e0 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
221f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
22200 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
22210 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
22220 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
22230 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
22240 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
22250 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
22260 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
22270 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
22280 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
22290 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
222a0 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
222b0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
222c0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
222d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
222e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
222f0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
22300 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
22310 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
22320 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
22330 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
22340 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
22350 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
22360 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
22370 2a 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  *);.#  define sq
22380 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
22390 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
223a0 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
223b0 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
223c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
223d0 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
223e0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
223f0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
22400 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
22410 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
22420 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
22430 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
22440 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
22450 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
22460 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
22470 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
22480 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
22490 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
224a0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
224b0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
224c0 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
224d0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
224e0 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
224f0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
22500 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
22510 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
22520 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
22530 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
22540 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
22550 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
22560 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
22570 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
22580 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
22590 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
225a0 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
225b0 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
225c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
225d0 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
225e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
225f0 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
22600 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
22610 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
22620 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
22630 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
22640 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
22650 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
22660 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
22670 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
22680 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
22690 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
226a0 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
226b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
226c0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
226d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
226e0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
226f0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
22700 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
22710 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
22720 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
22730 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
22740 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
22750 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
22760 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
22770 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
22780 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
22790 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
227a0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
227b0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
227c0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
227d0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
227e0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
227f0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
22800 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
22810 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
22820 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
22830 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
22840 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
22850 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
22860 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
22870 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
22880 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
22890 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
228a0 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
228b0 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
228c0 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
228d0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
228e0 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
228f0 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
22900 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
22910 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
22920 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
22930 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
22940 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
22950 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
22960 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
22970 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
22980 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
22990 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69 64 65 64   is .** provided
229a0 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66   (enforcement of
229b0 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
229c0 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69  requires the tri
229d0 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d  ggers sub-system
229e0 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  )..*/.#if !defin
229f0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
22a00 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
22a10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22a20 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76  MIT_TRIGGER).  v
22a30 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65  oid sqlite3FkChe
22a40 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ck(Parse*, Table
22a50 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
22a60 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
22a70 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
22a80 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
22a90 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  st *, Table*);. 
22aa0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41   void sqlite3FkA
22ab0 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54  ctions(Parse*, T
22ac0 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  able*, ExprList*
22ad0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
22ae0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22af0 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65  FkRequired(Parse
22b00 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c  *, Table*, int*,
22b10 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c   int);.  u32 sql
22b20 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61  ite3FkOldmask(Pa
22b30 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  rse*, Table*);. 
22b40 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b   FKey *sqlite3Fk
22b50 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65  References(Table
22b60 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
22b70 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63  fine sqlite3FkAc
22b80 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c  tions(a,b,c,d,e,
22b90 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
22ba0 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c  ite3FkCheck(a,b,
22bb0 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69  c,d,e,f).  #defi
22bc0 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  ne sqlite3FkDrop
22bd0 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23  Table(a,b,c).  #
22be0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
22bf0 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20  Oldmask(a,b)    
22c00 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65       0.  #define
22c10 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
22c20 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30  ed(a,b,c,d)    0
22c30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
22c40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
22c50 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73  IGN_KEY.  void s
22c60 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73  qlite3FkDelete(s
22c70 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a  qlite3 *, Table*
22c80 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
22c90 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61  FkLocateIndex(Pa
22ca0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79  rse*,Table*,FKey
22cb0 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29  *,Index**,int**)
22cc0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
22cd0 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  e sqlite3FkDelet
22ce0 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65  e(a,b).  #define
22cf0 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65   sqlite3FkLocate
22d00 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29  Index(a,b,c,d,e)
22d10 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
22d20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20  Available fault 
22d30 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75  injectors.  Shou
22d40 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62  ld be numbered b
22d50 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e  eginning with 0.
22d60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
22d70 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
22d80 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64  _MALLOC     0.#d
22d90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55  efine SQLITE_FAU
22da0 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54  LTINJECTOR_COUNT
22db0 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54        1../*.** T
22dc0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
22dd0 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c  the code in faul
22de0 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65  t.c used for ide
22df0 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e  ntifying "benign
22e00 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  ".** malloc fail
22e10 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e  ures. This is on
22e20 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51  ly present if SQ
22e30 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
22e40 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74  N_TEST.** is not
22e50 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66   defined..*/.#if
22e60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
22e70 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20  _BUILTIN_TEST.  
22e80 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
22e90 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
22ea0 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
22eb0 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
22ec0 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
22ed0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
22ee0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
22ef0 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
22f00 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
22f10 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
22f20 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
22f30 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 20 20  _ROWID          
22f40 20 31 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e   1.#define IN_IN
22f50 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
22f60 20 20 20 20 32 0a 23 64 65 66 69 6e 65 20 49 4e      2.#define IN
22f70 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
22f80 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e 65         3.#define
22f90 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
22fa0 44 45 53 43 20 20 20 20 20 20 34 0a 69 6e 74 20  DESC      4.int 
22fb0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
22fc0 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
22fd0 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23 69 66 64   *, int*);..#ifd
22fe0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22ff0 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
23000 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
23010 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  alOpen(sqlite3_v
23020 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  fs *, const char
23030 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65   *, sqlite3_file
23040 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
23050 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
23060 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
23070 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71  vfs *);.  int sq
23080 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61  lite3JournalCrea
23090 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  te(sqlite3_file 
230a0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
230b0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 73  3JournalExists(s
230c0 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
230d0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
230e0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
230f0 69 7a 65 28 70 56 66 73 29 20 28 28 70 56 66 73  ize(pVfs) ((pVfs
23100 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a 20 20 23  )->szOsFile).  #
23110 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f  define sqlite3Jo
23120 75 72 6e 61 6c 45 78 69 73 74 73 28 70 29 20 31  urnalExists(p) 1
23130 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71  .#endif..void sq
23140 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
23150 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
23160 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
23170 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 76  MemJournalSize(v
23180 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
23190 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c 28 73 71  3IsMemJournal(sq
231a0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
231b0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
231c0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 76 6f  XPR_DEPTH>0.  vo
231d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
231e0 74 48 65 69 67 68 74 28 50 61 72 73 65 20 2a 70  tHeight(Parse *p
231f0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
23200 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
23210 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
23220 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
23230 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
23240 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
23250 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
23260 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
23270 53 65 74 48 65 69 67 68 74 28 78 2c 79 29 0a 20  SetHeight(x,y). 
23280 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
23290 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
232a0 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
232b0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
232c0 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
232d0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
232e0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
232f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
23300 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
23310 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
23320 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
23330 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
23340 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
23350 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
23360 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
23370 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
23380 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
23390 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
233a0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
233b0 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
233c0 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
233d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
233e0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
233f0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
23400 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
23410 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
23420 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
23430 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
23440 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
23450 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
23460 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
23470 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
23480 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
23490 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
234a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
234b0 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
234c0 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
234d0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
234e0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
234f0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
23500 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
23510 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
23520 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
23530 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64 65 66 20  ges. .*/.#ifdef 
23540 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
23550 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
23560 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
23570 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
23580 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
23590 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
235a0 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
235b0 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
235c0 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 2a 73  _EXTERN void (*s
235d0 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63  qlite3IoTrace)(c
235e0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
235f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23600 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66  IOTRACE(A).# def
23610 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49  ine sqlite3VdbeI
23620 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e  OTraceSql(X).#en
23630 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  dif../*.** These
23640 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76   routines are av
23650 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ailable for the 
23660 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67  mem2.c debugging
23670 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f   memory allocato
23680 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79  r.** only.  They
23690 20 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72   are used to ver
236a0 69 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65  ify that differe
236b0 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65  nt "types" of me
236c0 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69  mory.** allocati
236d0 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79  ons are properly
236e0 20 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20   tracked by the 
236f0 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71  system..**.** sq
23700 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
23710 54 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20  Type() sets the 
23720 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c  "type" of an all
23730 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f  ocation to one o
23740 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45  f.** the MEMTYPE
23750 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  _* macros define
23760 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79  d below.  The ty
23770 70 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74  pe must be a bit
23780 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73  mask with.** a s
23790 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a  ingle bit set..*
237a0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
237b0 65 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65  ebugHasType() re
237c0 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e  turns true if an
237d0 79 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  y of the bits in
237e0 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
237f0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
23800 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
23810 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
23820 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
23830 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  e()..** sqlite3M
23840 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
23850 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
23860 20 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65   use inside asse
23870 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e  rt() statements.
23880 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
23890 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72  mdebugNoType() r
238a0 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e  eturns true if n
238b0 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20  one of the bits 
238c0 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
238d0 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
238e0 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
238f0 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
23900 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
23910 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72  ype()..**.** Per
23920 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d  haps the most im
23930 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73  portant point is
23940 20 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20   the difference 
23950 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f  between MEMTYPE_
23960 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54  HEAP.** and MEMT
23970 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20  YPE_LOOKASIDE.  
23980 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  If an allocation
23990 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b   is MEMTYPE_LOOK
239a0 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e  ASIDE, that mean
239b0 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61  s.** it might ha
239c0 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
239d0 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20  d by lookaside, 
239e0 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63  except the alloc
239f0 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f  ation was.** too
23a00 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73   large or lookas
23a10 69 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20  ide was already 
23a20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70  full.  It is imp
23a30 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79  ortant to verify
23a40 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74  .** that allocat
23a50 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20  ions that might 
23a60 68 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66  have been satisf
23a70 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ied by lookaside
23a80 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73   are not.** pass
23a90 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c  ed back to non-l
23aa0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
23ab0 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72  routines.  Asser
23ac0 74 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a  ts such as the.*
23ad0 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20  * example above 
23ae0 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68  are placed on th
23af0 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  e non-lookaside 
23b00 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20  free() routines 
23b10 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69  to verify.** thi
23b20 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 20 0a 2a  s constraint. .*
23b30 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73  *.** All of this
23b40 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20   is no-op for a 
23b50 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64  production build
23b60 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73  .  It only comes
23b70 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68   into.** play wh
23b80 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45  en the SQLITE_ME
23b90 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74  MDEBUG compile-t
23ba0 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73  ime option is us
23bb0 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
23bc0 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20  LITE_MEMDEBUG.  
23bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64  void sqlite3Memd
23be0 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69 64  ebugSetType(void
23bf0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
23c00 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
23c10 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
23c20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
23c30 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a  ebugNoType(void*
23c40 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ,u8);.#else.# de
23c50 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
23c60 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59 29  ebugSetType(X,Y)
23c70 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20    /* no-op */.# 
23c80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
23c90 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58 2c  mdebugHasType(X,
23ca0 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73  Y)  1.# define s
23cb0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
23cc0 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65  Type(X,Y)   1.#e
23cd0 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d  ndif.#define MEM
23ce0 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20 20  TYPE_HEAP       
23cf0 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c  0x01  /* General
23d00 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e   heap allocation
23d10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d  s */.#define MEM
23d20 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20  TYPE_LOOKASIDE  
23d30 30 78 30 32 20 20 2f 2a 20 4d 69 67 68 74 20 68  0x02  /* Might h
23d40 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
23d50 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 23 64 65  de memory */.#de
23d60 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
23d70 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
23d80 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
23d90 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
23da0 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
23db0 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
23dc0 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
23dd0 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
23de0 4d 54 59 50 45 5f 44 42 20 20 20 20 20 20 20 20  MTYPE_DB        
23df0 20 30 78 31 30 20 20 2f 2a 20 55 73 65 73 20 73   0x10  /* Uses s
23e00 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 2c 20  qlite3DbMalloc, 
23e10 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61 6c 6c 6f  not sqlite_mallo
23e20 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  c */..#endif /* 
23e30 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f 20 2a 2f  _SQLITEINT_H_ */
23e40 0a                                               .