/ Hex Artifact Content
Login

Artifact e4d4b5db50e69f2ce130d40d324db5b5c5638aa8:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 6e 63 6c  ite..**.*/.#incl
01b0: 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a  ude "sqlite3.h".
01c0: 23 69 66 6e 64 65 66 20 5f 53 51 4c 49 54 45 49  #ifndef _SQLITEI
01d0: 4e 54 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f 53  NT_H_.#define _S
01e0: 51 4c 49 54 45 49 4e 54 5f 48 5f 0a 0a 2f 2a 0a  QLITEINT_H_../*.
01f0: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0200: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0210: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0220: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
0230: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
0240: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
0250: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
0260: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
0270: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
0280: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0290: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
02a0: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
02b0: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
02c0: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
02d0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
02e0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
02f0: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0300: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0310: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0320: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0330: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0340: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0350: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0360: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0370: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0380: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0390: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
03a0: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
03b0: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
03c0: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
03d0: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
03e0: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
03f0: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0400: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0410: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0420: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0430: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0440: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0450: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0460: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0470: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0480: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0490: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
04a0: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
04b0: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
04c0: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
04d0: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
04e0: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
04f0: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0500: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0510: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0520: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0530: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0540: 53 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c 61 72  S..**.** Similar
0550: 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d 61 63   is true for Mac
0560: 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73 20 6f   OS X.  LFS is o
0570: 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20 6f 6e  nly supported on
0580: 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e 64 20   Mac OS X 9 and 
0590: 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e 64 65  later..*/.#ifnde
05a0: 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45  f SQLITE_DISABLE
05b0: 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20 5f 4c  _LFS.# define _L
05c0: 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20 20 20  ARGE_FILE       
05d0: 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49 4c 45  1.# ifndef _FILE
05e0: 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23 20 20  _OFFSET_BITS.#  
05f0: 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f 4f 46   define _FILE_OF
0600: 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23 20 65  FSET_BITS 64.# e
0610: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 5f 4c  ndif.# define _L
0620: 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43 45 20  ARGEFILE_SOURCE 
0630: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
0640: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
0650: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
0660: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
0670: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
0680: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
0690: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
06a0: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
06b0: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
06c0: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
06d0: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
06e0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
06f0: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
0700: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
0710: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
0720: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
0730: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
0740: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
0750: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
0760: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
0770: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
0780: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
0790: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
07a0: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
07b0: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
07c0: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
07d0: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
07e0: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
07f0: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
0800: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
0810: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
0820: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
0830: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
0840: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
0850: 66 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72  f../* Needed for
0860: 20 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74   various definit
0870: 69 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 6e 64  ions... */.#ifnd
0880: 65 66 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23  ef _GNU_SOURCE.#
0890: 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f 55   define _GNU_SOU
08a0: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  RCE.#endif..#if 
08b0: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
08c0: 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64  D__) && !defined
08d0: 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23 20  (_BSD_SOURCE).# 
08e0: 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55 52  define _BSD_SOUR
08f0: 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  CE.#endif../*.**
0900: 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64 61 72   Include standar
0910: 64 20 68 65 61 64 65 72 20 66 69 6c 65 73 20 61  d header files a
0920: 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f 0a 23  s necessary.*/.#
0930: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e  ifdef HAVE_STDIN
0940: 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  T_H.#include <st
0950: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
0960: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
0970: 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  PES_H.#include <
0980: 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65 6e 64  inttypes.h>.#end
0990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  if../*.** The fo
09a0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 61  llowing macros a
09b0: 72 65 20 75 73 65 64 20 74 6f 20 63 61 73 74 20  re used to cast 
09c0: 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 74 65  pointers to inte
09d0: 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e 74 65  gers and.** inte
09e0: 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65 72 73  gers to pointers
09f0: 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75 20 64  .  The way you d
0a00: 6f 20 74 68 69 73 20 76 61 72 69 65 73 20 66 72  o this varies fr
0a10: 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65 72 0a  om one compiler.
0a20: 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74 2c 20  ** to the next, 
0a30: 73 6f 20 77 65 20 68 61 76 65 20 64 65 76 65 6c  so we have devel
0a40: 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  oped the followi
0a50: 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20 73 74  ng set of #if st
0a60: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f 20 67  atements.** to g
0a70: 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70 72 69  enerate appropri
0a80: 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72 20 61  ate macros for a
0a90: 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66 20 63   wide range of c
0aa0: 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  ompilers..**.** 
0ab0: 54 68 65 20 63 6f 72 72 65 63 74 20 22 41 4e 53  The correct "ANS
0ac0: 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74 68 69  I" way to do thi
0ad0: 73 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  s is to use the 
0ae0: 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e 20 0a  intptr_t type. .
0af0: 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c 79  ** Unfortunately
0b00: 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20 69  , that typedef i
0b10: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 20  s not available 
0b20: 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  on all compilers
0b30: 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69 73  , or.** if it is
0b40: 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20 72   available, it r
0b50: 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63 6c  equires an #incl
0b60: 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63 20  ude of specific 
0b70: 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74 20  headers.** that 
0b80: 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d 61  vary from one ma
0b90: 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65 78  chine to the nex
0ba0: 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74 20  t..**.** Ticket 
0bb0: 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76 6d  #3860:  The llvm
0bc0: 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c 65  -gcc-4.2 compile
0bd0: 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68 6f  r from Apple cho
0be0: 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28 28  kes on.** the ((
0bf0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0c00: 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74 2e  )[X]) construct.
0c10: 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b 65    But MSVC choke
0c20: 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58 29  s on ((void*)(X)
0c30: 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76 65  )..** So we have
0c40: 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20 6d   to define the m
0c50: 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72 65  acros in differe
0c60: 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69 6e  nt ways dependin
0c70: 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  g on the.** comp
0c80: 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  iler..*/.#if def
0c90: 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f 54  ined(__PTRDIFF_T
0ca0: 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73 20  YPE__)  /* This 
0cb0: 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72 6b  case should work
0cc0: 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64 65   for GCC */.# de
0cd0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f  fine SQLITE_INT_
0ce0: 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69  TO_PTR(X)  ((voi
0cf0: 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59  d*)(__PTRDIFF_TY
0d00: 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66 69  PE__)(X)).# defi
0d10: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
0d20: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
0d30: 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f 5f  __PTRDIFF_TYPE__
0d40: 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65 66  )(X)).#elif !def
0d50: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 20  ined(__GNUC__)  
0d60: 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66 6f       /* Works fo
0d70: 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68 65  r compilers othe
0d80: 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a 23  r than LLVM */.#
0d90: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
0da0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
0db0: 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29 30  void*)&((char*)0
0dc0: 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20 53  )[X]).# define S
0dd0: 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
0de0: 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63 68  (X)  ((int)(((ch
0df0: 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30 29  ar*)X)-(char*)0)
0e00: 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28  ).#elif defined(
0e10: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20 20  HAVE_STDINT_H)  
0e20: 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61 73   /* Use this cas
0e30: 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e 53  e if we have ANS
0e40: 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20 64  I headers */.# d
0e50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
0e60: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
0e70: 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28 58  id*)(intptr_t)(X
0e80: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
0e90: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
0ea0: 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72 5f    ((int)(intptr_
0eb0: 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20 20  t)(X)).#else    
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74        /* Generat
0ee0: 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20 62  es a warning - b
0ef0: 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f 72  ut it always wor
0f00: 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  ks */.# define S
0f10: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
0f20: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58 29  (X)  ((void*)(X)
0f30: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
0f40: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
0f50: 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e 64   ((int)(X)).#end
0f60: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
0f70: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
0f80: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
0f90: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
0fa0: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
0fb0: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
0fc0: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
0fd0: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
0fe0: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
0ff0: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
1000: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
1010: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
1020: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
1030: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
1040: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
1050: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
1060: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
1070: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
1080: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
1090: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
10a0: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
10b0: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
10c0: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
10d0: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
10e0: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
10f0: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
1100: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
1110: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
1120: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
1130: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
1140: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a   for legacy..*/.
1150: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1160: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 29 0a  ITE_THREADSAFE).
1170: 23 20 69 66 20 64 65 66 69 6e 65 64 28 54 48 52  # if defined(THR
1180: 45 41 44 53 41 46 45 29 0a 23 20 20 20 64 65 66  EADSAFE).#   def
1190: 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41  ine SQLITE_THREA
11a0: 44 53 41 46 45 20 54 48 52 45 41 44 53 41 46 45  DSAFE THREADSAFE
11b0: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
11c0: 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ne SQLITE_THREAD
11d0: 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52  SAFE 1 /* IMP: R
11e0: 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a  -07272-22309 */.
11f0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a  # endif.#endif..
1200: 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66 65 20  /*.** Powersafe 
1210: 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f 6e 20  overwrite is on 
1220: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42 75 74  by default.  But
1230: 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64 20 6f   can be turned o
1240: 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  ff using.** the 
1250: 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  -DSQLITE_POWERSA
1260: 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30 20 63  FE_OVERWRITE=0 c
1270: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69  ommand-line opti
1280: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
1290: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
12a0: 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65 66 69  OVERWRITE.# defi
12b0: 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53  ne SQLITE_POWERS
12c0: 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20 31 0a  AFE_OVERWRITE 1.
12d0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
12e0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
12f0: 5f 4d 45 4d 53 54 41 54 55 53 20 6d 61 63 72 6f  _MEMSTATUS macro
1300: 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e 65 64   must be defined
1310: 20 61 73 20 65 69 74 68 65 72 20 30 20 6f 72 20   as either 0 or 
1320: 31 2e 0a 2a 2a 20 49 74 20 64 65 74 65 72 6d 69  1..** It determi
1330: 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e  nes whether or n
1340: 6f 74 20 74 68 65 20 66 65 61 74 75 72 65 73 20  ot the features 
1350: 72 65 6c 61 74 65 64 20 74 6f 20 0a 2a 2a 20 53  related to .** S
1360: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
1370: 53 54 41 54 55 53 20 61 72 65 20 61 76 61 69 6c  STATUS are avail
1380: 61 62 6c 65 20 62 79 20 64 65 66 61 75 6c 74 20  able by default 
1390: 6f 72 20 6e 6f 74 2e 20 54 68 69 73 20 76 61 6c  or not. This val
13a0: 75 65 20 63 61 6e 0a 2a 2a 20 62 65 20 6f 76 65  ue can.** be ove
13b0: 72 72 69 64 64 65 6e 20 61 74 20 72 75 6e 74 69  rridden at runti
13c0: 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  me using the sql
13d0: 69 74 65 33 5f 63 6f 6e 66 69 67 28 29 20 41 50  ite3_config() AP
13e0: 49 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  I..*/.#if !defin
13f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
1400: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
1410: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
1420: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
1430: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
1440: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
1450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1460: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
1470: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
1480: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
1490: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
14b0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
14c0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
14d0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
14e0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
14f0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
1500: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1510: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
1520: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
1530: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
1540: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
1550: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
1560: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
1570: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
1580: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
1590: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
15a0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
15b0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
15c0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
15d0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
15e0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
15f0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
1600: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
1610: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
1620: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
1630: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
1640: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
1650: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
1660: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
1670: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
1680: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
1690: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
16a0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
16b0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
16c0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
16d0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
16e0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
16f0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1700: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
1710: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
1720: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
1730: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
1740: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
1750: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
1760: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
1770: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
1780: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
1790: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
17a0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
17b0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
17c0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
17d0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
17e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
17f0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
1800: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
1810: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
1820: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
1830: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
1840: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
1850: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
1860: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
1870: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
1880: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
1890: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
18a0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
18b0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
18c0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
18d0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
18e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
18f0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
1900: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
1910: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
1920: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
1930: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
1940: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
1950: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
1960: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
1970: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
1980: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
1990: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
19a0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
19b0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
19c0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
19d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
19e0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
19f0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1a00: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
1a10: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
1a20: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
1a30: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
1a40: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
1a50: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
1a60: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
1a70: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
1a80: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
1a90: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
1aa0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
1ab0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
1ac0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
1ad0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
1ae0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
1af0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
1b00: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
1b10: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
1b20: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
1b30: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
1b40: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
1b50: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
1b60: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
1b70: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
1b80: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
1b90: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
1ba0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
1bb0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
1bc0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
1bd0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
1be0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
1bf0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
1c00: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
1c10: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
1c20: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
1c30: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
1c40: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
1c50: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
1c60: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
1c70: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
1c80: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
1c90: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
1ca0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
1cb0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
1cc0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
1cd0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
1ce0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
1cf0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
1d00: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
1d10: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
1d20: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
1d30: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
1d40: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
1d50: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
1d60: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
1d70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
1d80: 42 55 47 29 20 0a 23 20 64 65 66 69 6e 65 20 4e  BUG) .# define N
1d90: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
1da0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
1db0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
1dc0: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
1dd0: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
1de0: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
1df0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
1e00: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
1e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
1e20: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
1e30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1e40: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
1e50: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
1e60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1e70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
1e80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
1e90: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
1ea0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1eb0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
1ec0: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
1ed0: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
1ee0: 73 74 69 6e 67 2e 20 20 57 68 65 6e 20 0a 2a 2a  sting.  When .**
1ef0: 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20   doing coverage 
1f00: 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e  testing, the con
1f10: 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68  dition inside th
1f20: 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a  e argument to.**
1f30: 20 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74   testcase() must
1f40: 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f   be evaluated bo
1f50: 74 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  th true and fals
1f60: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1f70: 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68   get full branch
1f80: 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20   coverage.  The 
1f90: 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f  testcase() macro
1fa0: 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20   is inserted.** 
1fb0: 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61  to help ensure a
1fc0: 64 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76  dequate test cov
1fd0: 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20  erage in places 
1fe0: 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20  where simple.** 
1ff0: 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69  condition/decisi
2000: 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69  on coverage is i
2010: 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20  nadequate.  For 
2020: 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73  example, testcas
2030: 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73  e().** can be us
2040: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
2050: 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20  boundary values 
2060: 61 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72  are tested.  For
2070: 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74  .** bitmask test
2080: 73 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61  s, testcase() ca
2090: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b  n be used to mak
20a0: 65 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a  e sure each bit.
20b0: 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e  ** is significan
20c0: 74 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65  t and used at le
20d0: 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77  ast once.  On sw
20e0: 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a  itch statements.
20f0: 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c  ** where multipl
2100: 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68  e cases go to th
2110: 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20  e same block of 
2120: 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29  code, testcase()
2130: 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74  .** can insure t
2140: 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72  hat all cases ar
2150: 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a  e evaluated..**.
2160: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2170: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20  _COVERAGE_TEST. 
2180: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76   void sqlite3Cov
2190: 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65  erage(int);.# de
21a0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
21b0: 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74    if( X ){ sqlit
21c0: 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e  e3Coverage(__LIN
21d0: 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20  E__); }.#else.# 
21e0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
21f0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2200: 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61   The TESTONLY ma
2210: 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65  cro is used to e
2220: 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20  nclose variable 
2230: 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a  declarations or.
2240: 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66  ** other bits of
2250: 20 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e   code that are n
2260: 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74  eeded to support
2270: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a   the arguments.*
2280: 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73  * within testcas
2290: 65 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29  e() and assert()
22a0: 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20   macros..*/.#if 
22b0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
22c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
22d0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
22e0: 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  ).# define TESTO
22f0: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
2300: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
2310: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
2320: 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20  ** Sometimes we 
2330: 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f  need a small amo
2340: 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68  unt of code such
2350: 20 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69   as a variable i
2360: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
2370: 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20   to setup for a 
2380: 6c 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73  later assert() s
2390: 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f  tatement.  We do
23a0: 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63   not want this c
23b0: 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72  ode to.** appear
23c0: 20 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69   when assert() i
23d0: 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65  s disabled.  The
23e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23f0: 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a   is therefore.**
2400: 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e   used to contain
2410: 20 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65   that setup code
2420: 2e 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72  .  The "VVA" acr
2430: 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a  onym stands for.
2440: 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e  ** "Verification
2450: 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e  , Validation, an
2460: 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22  d Accreditation"
2470: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
2480: 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77  s, the.** code w
2490: 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29  ithin VVA_ONLY()
24a0: 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64   will only run d
24b0: 75 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69  uring verificati
24c0: 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f  on processes..*/
24d0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
24e0: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
24f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
2500: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
2510: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
2520: 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20   The ALWAYS and 
2530: 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72  NEVER macros sur
2540: 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78  round boolean ex
2550: 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 20  pressions which 
2560: 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64  .** are intended
2570: 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72   to always be tr
2580: 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73  ue or false, res
2590: 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68  pectively.  Such
25a0: 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20  .** expressions 
25b0: 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64  could be omitted
25c0: 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63   from the code c
25d0: 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20  ompletely.  But 
25e0: 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c  they.** are incl
25f0: 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63 61  uded in a few ca
2600: 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ses in order to 
2610: 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73 69  enhance the resi
2620: 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c  lience.** of SQL
2630: 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65  ite to unexpecte
2640: 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20  d behavior - to 
2650: 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73  make the code "s
2660: 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20  elf-healing".** 
2670: 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61 74  or "ductile" rat
2680: 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22  her than being "
2690: 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61  brittle" and cra
26a0: 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69 72  shing at the fir
26b0: 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e  st.** hint of un
26c0: 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72  planned behavior
26d0: 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ..**.** In other
26e0: 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61   words, ALWAYS a
26f0: 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64 64  nd NEVER are add
2700: 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65  ed for defensive
2710: 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65   code..**.** Whe
2720: 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65  n doing coverage
2730: 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20   testing ALWAYS 
2740: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68 61  and NEVER are ha
2750: 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62  rd-coded to.** b
2760: 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  e true and false
2770: 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72   so that the unr
2780: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68  eachable code th
2790: 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a  ey specify will.
27a0: 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65  ** not be counte
27b0: 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f  d as untested co
27c0: 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  de..*/.#if defin
27d0: 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ed(SQLITE_COVERA
27e0: 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e  GE_TEST).# defin
27f0: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
2800: 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (1).# define NE
2810: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29  VER(X)       (0)
2820: 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
2830: 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65  NDEBUG).# define
2840: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
2850: 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30  ((X)?1:(assert(0
2860: 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e  ),0)).# define N
2870: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28  EVER(X)       ((
2880: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
2890: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
28a0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
28b0: 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e    (X).# define N
28c0: 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58  EVER(X)       (X
28d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
28e0: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
28f0: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
2900: 70 75 74 20 69 73 20 61 20 69 6e 74 65 67 65 72  put is a integer
2910: 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61 72   that is too lar
2920: 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20  ge.** to fit in 
2930: 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20 6d  32-bits.  This m
2940: 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
2950: 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20 74  ide of various t
2960: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63  estcase().** mac
2970: 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74 68  ros to verify th
2980: 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74 65  at we have teste
2990: 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61 72  d SQLite for lar
29a0: 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74 2e  ge-file support.
29b0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f 42  .*/.#define IS_B
29c0: 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58 29  IG_INT(X)  (((X)
29d0: 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66 66  &~(i64)0xfffffff
29e0: 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  f)!=0)../*.** Th
29f0: 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79  e macro unlikely
2a00: 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68 61  () is a hint tha
2a10: 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62 6f  t surrounds a bo
2a20: 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  olean.** express
2a30: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
2a40: 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63 72  lly false.  Macr
2a50: 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72 6f  o likely() surro
2a60: 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61  unds.** a boolea
2a70: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61  n expression tha
2a80: 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72 75  t is usually tru
2a90: 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73 20  e.  These hints 
2aa0: 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65  could,.** in the
2ab0: 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79 20  ory, be used by 
2ac0: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20  the compiler to 
2ad0: 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72 20  generate better 
2ae0: 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72  code, but.** cur
2af0: 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65 20  rently they are 
2b00: 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f  just comments fo
2b10: 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 2e  r human readers.
2b20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65  .*/.#define like
2b30: 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64 65  ly(X)    (X).#de
2b40: 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29  fine unlikely(X)
2b50: 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20    (X)..#include 
2b60: 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64  "hash.h".#includ
2b70: 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e 63  e "parse.h".#inc
2b80: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
2b90: 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e  include <stdlib.
2ba0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  h>.#include <str
2bb0: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
2bc0: 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c  <assert.h>.#incl
2bd0: 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a  ude <stddef.h>..
2be0: 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69  /*.** If compili
2bf0: 6e 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73  ng for a process
2c00: 6f 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c  or that lacks fl
2c10: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70  oating point sup
2c20: 70 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74  port,.** substit
2c30: 75 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20  ute integer for 
2c40: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a  floating-point.*
2c50: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2c60: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
2c70: 49 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75  INT.# define dou
2c80: 62 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ble sqlite_int64
2c90: 0a 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20  .# define float 
2ca0: 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64  sqlite_int64.# d
2cb0: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
2cc0: 5f 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74  _TYPE sqlite_int
2cd0: 36 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49  64.# ifndef SQLI
2ce0: 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64  TE_BIG_DBL.#   d
2cf0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
2d00: 5f 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f  _DBL (((sqlite3_
2d10: 69 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20  int64)1)<<50).# 
2d20: 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53  endif.# define S
2d30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54  QLITE_OMIT_DATET
2d40: 49 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65  IME_FUNCS 1.# de
2d50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
2d60: 5f 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66  _TRACE 1.# undef
2d70: 20 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e   SQLITE_MIXED_EN
2d80: 44 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54  DIAN_64BIT_FLOAT
2d90: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
2da0: 48 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69  HAVE_ISNAN.#endi
2db0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
2dc0: 5f 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e  _BIG_DBL.# defin
2dd0: 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  e SQLITE_BIG_DBL
2de0: 20 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a   (1e99).#endif..
2df0: 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44  /*.** OMIT_TEMPD
2e00: 42 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66  B is set to 1 if
2e10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
2e20: 50 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20  PDB is defined, 
2e30: 6f 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72  or 0.** afterwar
2e40: 64 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d  d. Having this m
2e50: 61 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  acro allows us t
2e60: 6f 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f  o cause the C co
2e70: 6d 70 69 6c 65 72 20 0a 2a 2a 20 74 6f 20 6f 6d  mpiler .** to om
2e80: 69 74 20 63 6f 64 65 20 75 73 65 64 20 62 79 20  it code used by 
2e90: 54 45 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68  TEMP tables with
2ea0: 6f 75 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65  out messy #ifnde
2eb0: 66 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f  f statements..*/
2ec0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2ed0: 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69  MIT_TEMPDB.#defi
2ee0: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31  ne OMIT_TEMPDB 1
2ef0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f  .#else.#define O
2f00: 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e  MIT_TEMPDB 0.#en
2f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22  dif../*.** The "
2f20: 66 69 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d  file format" num
2f30: 62 65 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ber is an intege
2f40: 72 20 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d  r that is increm
2f50: 65 6e 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a  ented whenever.*
2f60: 2a 20 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c  * the VDBE-level
2f70: 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61   file format cha
2f80: 6e 67 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  nges.  The follo
2f90: 77 69 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69  wing macros defi
2fa0: 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65  ne the.** the de
2fb0: 66 61 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61  fault file forma
2fc0: 74 20 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61  t for new databa
2fd0: 73 65 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69  ses and the maxi
2fe0: 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a  mum file format.
2ff0: 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 69 62 72  ** that the libr
3000: 61 72 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f  ary can read..*/
3010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
3020: 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  MAX_FILE_FORMAT 
3030: 34 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  4.#ifndef SQLITE
3040: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
3050: 52 4d 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51  RMAT.# define SQ
3060: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
3070: 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69  E_FORMAT 4.#endi
3080: 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  f../*.** Determi
3090: 6e 65 20 77 68 65 74 68 65 72 20 74 72 69 67 67  ne whether trigg
30a0: 65 72 73 20 61 72 65 20 72 65 63 75 72 73 69 76  ers are recursiv
30b0: 65 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54  e by default.  T
30c0: 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68  his can be.** ch
30d0: 61 6e 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d  anged at run-tim
30e0: 65 20 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61  e using a pragma
30f0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
3100: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
3110: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23  RSIVE_TRIGGERS.#
3120: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
3130: 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45  EFAULT_RECURSIVE
3140: 5f 54 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64  _TRIGGERS 0.#end
3150: 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64  if../*.** Provid
3160: 65 20 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75  e a default valu
3170: 65 20 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d  e for SQLITE_TEM
3180: 50 5f 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20  P_STORE in case 
3190: 69 74 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  it is not specif
31a0: 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f  ied.** on the co
31b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69  mmand-line.*/.#i
31c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d  fndef SQLITE_TEM
31d0: 50 5f 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65  P_STORE.# define
31e0: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
31f0: 52 45 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51  RE 1.# define SQ
3200: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  LITE_TEMP_STORE_
3210: 78 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65  xc 1  /* Exclude
3220: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
3230: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
3240: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
3250: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
3260: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
3270: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
3280: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
3290: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
32a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
32b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
32c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
32d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
32e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
32f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
3300: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
3310: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
3320: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
3330: 2f 0a 23 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  /.#define MIN(A,
3340: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
3350: 28 42 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 58  (B)).#define MAX
3360: 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28  (A,B) ((A)>(B)?(
3370: 41 29 3a 28 42 29 29 0a 0a 2f 2a 0a 2a 2a 20 43  A):(B))../*.** C
3380: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74  heck to see if t
3390: 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73  his machine uses
33a0: 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20   EBCDIC.  (Yes, 
33b0: 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a  believe it or.**
33c0: 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20   not, there are 
33d0: 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f  still machines o
33e0: 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73  ut there that us
33f0: 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69  e EBCDIC.).*/.#i
3400: 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a  f 'A' == '\301'.
3410: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3420: 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23  EBCDIC 1.#else.#
3430: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41   define SQLITE_A
3440: 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  SCII 1.#endif../
3450: 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66  *.** Integers of
3460: 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54   known sizes.  T
3470: 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69  hese typedefs mi
3480: 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61  ght change for a
3490: 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20  rchitectures.** 
34a0: 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20  where the sizes 
34b0: 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73  very.  Preproces
34c0: 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61  sor macros are a
34d0: 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74  vailable so that
34e0: 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61   the.** types ca
34f0: 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c  n be convenientl
3500: 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63  y redefined at c
3510: 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69  ompile-type.  Li
3520: 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20  ke this:.**.**  
3530: 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e         cc '-DUIN
3540: 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c  TPTR_TYPE=long l
3550: 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a  ong int' ....*/.
3560: 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54  #ifndef UINT32_T
3570: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3580: 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66  _UINT32_T.#  def
3590: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
35a0: 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a  uint32_t.# else.
35b0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32  #  define UINT32
35c0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69  _TYPE unsigned i
35d0: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
35e0: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36  f.#ifndef UINT16
35f0: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
3600: 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64  VE_UINT16_T.#  d
3610: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
3620: 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  E uint16_t.# els
3630: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
3640: 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  16_TYPE unsigned
3650: 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64   short int.# end
3660: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
3670: 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69  f INT16_TYPE.# i
3680: 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f  fdef HAVE_INT16_
3690: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  T.#  define INT1
36a0: 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23  6_TYPE int16_t.#
36b0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
36c0: 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74  INT16_TYPE short
36d0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
36e0: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
36f0: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
3700: 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64  AVE_UINT8_T.#  d
3710: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
3720: 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a   uint8_t.# else.
3730: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f  #  define UINT8_
3740: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68  TYPE unsigned ch
3750: 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  ar.# endif.#endi
3760: 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54  f.#ifndef INT8_T
3770: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
3780: 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  _INT8_T.#  defin
3790: 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38  e INT8_TYPE int8
37a0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
37b0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69  ine INT8_TYPE si
37c0: 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69  gned char.# endi
37d0: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
37e0: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
37f0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
3800: 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64  UBLE_TYPE long d
3810: 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70  ouble.#endif.typ
3820: 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36  edef sqlite_int6
3830: 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20  4 i64;          
3840: 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 8-byte signed
3850: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
3860: 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36  def sqlite_uint6
3870: 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f  4 u64;         /
3880: 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 8-byte unsigne
3890: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
38a0: 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45  edef UINT32_TYPE
38b0: 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20   u32;           
38c0: 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 4-byte unsign
38d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
38e0: 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  pedef UINT16_TYP
38f0: 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20  E u16;          
3900: 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67   /* 2-byte unsig
3910: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
3920: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
3930: 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20  E i16;          
3940: 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e    /* 2-byte sign
3950: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
3960: 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  pedef UINT8_TYPE
3970: 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   u8;            
3980: 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67   /* 1-byte unsig
3990: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
39a0: 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45  ypedef INT8_TYPE
39b0: 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20   i8;            
39c0: 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e    /* 1-byte sign
39d0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f  ed integer */../
39e0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f  *.** SQLITE_MAX_
39f0: 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e  U32 is a u64 con
3a00: 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68  stant that is th
3a10: 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61  e maximum u64 va
3a20: 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20  lue.** that can 
3a30: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75  be stored in a u
3a40: 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  32 without loss 
3a50: 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61  of data.  The va
3a60: 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30  lue.** is 0x0000
3a70: 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42  0000ffffffff.  B
3a80: 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75  ut because of qu
3a90: 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d  irks of some com
3aa0: 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61  pilers, we.** ha
3ab0: 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68  ve to specify th
3ac0: 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c  e value in the l
3ad0: 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61  ess intuitive ma
3ae0: 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23  nner shown:.*/.#
3af0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
3b00: 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31  X_U32  ((((u64)1
3b10: 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  )<<32)-1)../*.**
3b20: 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73   The datatype us
3b30: 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69  ed to store esti
3b40: 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d  mates of the num
3b50: 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61  ber of rows in a
3b60: 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
3b70: 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ex.  This is an 
3b80: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
3b90: 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39   type.  For 99.9
3ba0: 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c  % of.** the worl
3bb0: 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65  d, a 32-bit inte
3bc0: 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e  ger is sufficien
3bd0: 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74  t.  But a 64-bit
3be0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20   integer.** can 
3bf0: 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69  be used at compi
3c00: 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72  le-time if desir
3c10: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
3c20: 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53  LITE_64BIT_STATS
3c30: 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52  . typedef u64 tR
3c40: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d  owcnt;    /* 64-
3c50: 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75  bit only if requ
3c60: 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  ested at compile
3c70: 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20  -time */.#else. 
3c80: 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77  typedef u32 tRow
3c90: 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69  cnt;    /* 32-bi
3ca0: 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
3cb0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
3cc0: 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e  * Estimated quan
3cd0: 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20  tities used for 
3ce0: 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61  query planning a
3cf0: 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d  re stored as 16-
3d00: 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d  bit.** logarithm
3d10: 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79  s.  For quantity
3d20: 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74   X, the value st
3d30: 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28  ored is 10*log2(
3d40: 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76  X).  This.** giv
3d50: 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61  es a possible ra
3d60: 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66  nge of values of
3d70: 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31   approximately 1
3d80: 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36  .0e986 to 1e-986
3d90: 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c  ..** But the all
3da0: 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20  owed values are 
3db0: 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65  "grainy".  Not e
3dc0: 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65  very value is re
3dd0: 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20  presentable..** 
3de0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61  For example, qua
3df0: 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31  ntities 16 and 1
3e00: 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65  7 are both repre
3e10: 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45  sented by a LogE
3e20: 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f  st.** of 40.  Ho
3e30: 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67  wever, since Log
3e40: 45 73 74 20 71 75 61 6e 74 61 74 69 74 65 73 20  Est quantatites 
3e50: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
3e60: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
3e70: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
3e80: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
3e90: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
3ea0: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
3eb0: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
3ec0: 20 22 4c 6f 67 61 72 69 74 68 69 6d 69 63 20 45   "Logarithimic E
3ed0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
3ee0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
3ef0: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
3f00: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
3f10: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
3f20: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
3f30: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
3f40: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
3f50: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
3f60: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
3f70: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
3f80: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
3f90: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
3fa0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
3fb0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
3fc0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
3fd0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
3fe0: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
3ff0: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
4000: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
4010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
4020: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
4030: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
4040: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
4050: 20 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a   .** Examples:.*
4060: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
4070: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
4080: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
4090: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
40a0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
40b0: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
40c0: 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
40d0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
40e0: 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67  e machine is big
40f0: 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61   or little endia
4100: 6e 2c 0a 2a 2a 20 65 76 61 6c 75 61 74 65 64 20  n,.** evaluated 
4110: 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2f 0a 23  at runtime..*/.#
4120: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
4130: 4c 47 41 4d 41 54 49 4f 4e 0a 63 6f 6e 73 74 20  LGAMATION.const 
4140: 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d  int sqlite3one =
4150: 20 31 3b 0a 23 65 6c 73 65 0a 65 78 74 65 72 6e   1;.#else.extern
4160: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
4170: 65 33 6f 6e 65 3b 0a 23 65 6e 64 69 66 0a 23 69  e3one;.#endif.#i
4180: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
4190: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
41a0: 36 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  6__) || defined(
41b0: 5f 4d 5f 49 58 38 36 29 5c 0a 20 20 20 20 20 20  _M_IX86)\.      
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41d0: 20 20 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65         || define
41e0: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
41f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
4200: 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
4210: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4220: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
4230: 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31  E_LITTLEENDIAN 1
4240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4250: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51  _UTF16NATIVE  SQ
4260: 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c  LITE_UTF16LE.#el
4270: 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  se.# define SQLI
4280: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
4290: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
42a0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
42b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
42c0: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
42d0: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
42e0: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
42f0: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
4300: 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49   (SQLITE_BIGENDI
4310: 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36 42  AN?SQLITE_UTF16B
4320: 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  E:SQLITE_UTF16LE
4330: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
4340: 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74 68  Constants for th
4350: 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73 6d  e largest and sm
4360: 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65 20  allest possible 
4370: 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  64-bit signed in
4380: 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65  tegers..** These
4390: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 69   macros are desi
43a0: 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72  gned to work cor
43b0: 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33  rectly on both 3
43c0: 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74  2-bit and 64-bit
43d0: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a  .** compilers..*
43e0: 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45 53  /.#define LARGES
43f0: 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66 66  T_INT64  (0xffff
4400: 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37 66  ffff|(((i64)0x7f
4410: 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23 64  ffffff)<<32)).#d
4420: 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49  efine SMALLEST_I
4430: 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29 20  NT64 (((i64)-1) 
4440: 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 29  - LARGEST_INT64)
4450: 0a 0a 2f 2a 20 0a 2a 2a 20 52 6f 75 6e 64 20 75  ../* .** Round u
4460: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
4470: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
4480: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
4490: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
44a0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
44b0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
44c0: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
44d0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
44e0: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
44f0: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
4500: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
4510: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
4520: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
4530: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
4540: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
4550: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
4560: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
4570: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
4580: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
4590: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
45a0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
45b0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
45c0: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
45d0: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
45e0: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
45f0: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
4600: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
4610: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
4620: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
4630: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
4640: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
4650: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 69 6f  oc() implementio
4660: 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75  n might return u
4670: 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64  s 4-byte aligned
4680: 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49  .** pointers.  I
4690: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c  n that case, onl
46a0: 79 20 76 65 72 69 66 79 20 34 2d 62 79 74 65 20  y verify 4-byte 
46b0: 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69  alignment..*/.#i
46c0: 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  fdef SQLITE_4_BY
46d0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
46e0: 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  C.# define EIGHT
46f0: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
4700: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
4710: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33  X) - (char*)0)&3
4720: 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  )==0).#else.# de
4730: 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f  fine EIGHT_BYTE_
4740: 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28  ALIGNMENT(X)   (
4750: 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28  (((char*)(X) - (
4760: 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a  char*)0)&7)==0).
4770: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69  #endif../*.** Di
4780: 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c  sable MMAP on pl
4790: 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74  atforms where it
47a0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74   is known to not
47b0: 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66   work.*/.#if def
47c0: 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f  ined(__OpenBSD__
47d0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51  ) || defined(__Q
47e0: 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66  NXNTO__).# undef
47f0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
4800: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
4810: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
4820: 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IZE 0.#endif../*
4830: 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69  .** Default maxi
4840: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f  mum size of memo
4850: 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72  ry used by memor
4860: 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20  y-mapped I/O in 
4870: 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65  the VFS.*/.#ifde
4880: 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e  f __APPLE__.# in
4890: 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e  clude <TargetCon
48a0: 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 20 69  ditionals.h>.# i
48b0: 66 20 54 41 52 47 45 54 5f 4f 53 5f 49 50 48 4f  f TARGET_OS_IPHO
48c0: 4e 45 0a 23 20 20 20 75 6e 64 65 66 20 53 51 4c  NE.#   undef SQL
48d0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
48e0: 45 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  E.#   define SQL
48f0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4900: 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 0.# endif.#end
4910: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
4920: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
4930: 23 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c  # if defined(__l
4940: 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64  inux__) \.  || d
4950: 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c  efined(_WIN32) \
4960: 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f  .  || (defined(_
4970: 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66  _APPLE__) && def
4980: 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20  ined(__MACH__)) 
4990: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
49a0: 5f 73 75 6e 29 0a 23 20 20 20 64 65 66 69 6e 65  _sun).#   define
49b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
49c0: 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30  _SIZE 0x7fff0000
49d0: 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20    /* 2147418112 
49e0: 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  */.# else.#   de
49f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4a00: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e  MMAP_SIZE 0.# en
4a10: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
4a20: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
4a30: 45 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64  E_xc 1 /* exclud
4a40: 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a  e from ctime.c *
4a50: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
4a60: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
4a70: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
4a80: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
4a90: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
4aa0: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
4ab0: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
4ac0: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
4ad0: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
4ae0: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
4af0: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
4b00: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
4b10: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
4b20: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
4b30: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
4b40: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4b50: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64  _MMAP_SIZE 0.# d
4b60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4b70: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78  AULT_MMAP_SIZE_x
4b80: 63 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20  c 1  /* Exclude 
4b90: 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a  from ctime.c */.
4ba0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
4bb0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
4bc0: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
4bd0: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
4be0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4bf0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
4c00: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4c10: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
4c20: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
4c30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
4c40: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
4c50: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
4c60: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
4c70: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
4c80: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
4c90: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
4ca0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
4cb0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
4cc0: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
4cd0: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
4ce0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4cf0: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
4d00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4d10: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
4d20: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
4d50: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
4d60: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
4d70: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
4d80: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
4d90: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
4da0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
4db0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
4dc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
4dd0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
4de0: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
4df0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
4e00: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
4e10: 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
4e20: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75 73  to store the bus
4e30: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
4e40: 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65  lback for a give
4e50: 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e  n sqlite handle.
4e60: 20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69   .**.** The sqli
4e70: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
4e80: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
4e90: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
4ea0: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
4eb0: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
4ec0: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
4ed0: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
4ee0: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
4ef0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
4f00: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
4f10: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
4f20: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
4f30: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
4f40: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
4f50: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
4f60: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
4f70: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
4f80: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4f90: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
4fa0: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
4fb0: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
4fc0: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
4fd0: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
4fe0: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
4ff0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
5000: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
5010: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
5020: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
5030: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
5040: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
5050: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
5060: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
5070: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
5080: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
5090: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
50a0: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
50b0: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
50c0: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
50d0: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
50e0: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
50f0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
5100: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
5110: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
5120: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
5130: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
5140: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
5150: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
5160: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
5170: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
5180: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
5190: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
51a0: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
51b0: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
51c0: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
51d0: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
51e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
51f0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
5200: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
5210: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
5220: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
5230: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
5240: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
5250: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
5260: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
5270: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
5280: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
5290: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
52a0: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
52b0: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
52c0: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
52d0: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
52e0: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
52f0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
5300: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
5310: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
5320: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
5330: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
5340: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
5350: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
5360: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
5370: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
5380: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
5390: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
53a0: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 20 0a 2a  nstead of the .*
53b0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
53c0: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
53d0: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
53e0: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
53f0: 6e 74 72 6f 64 75 63 65 20 0a 2a 2a 20 74 68 69  ntroduce .** thi
5400: 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68  s magic value th
5410: 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77  at the code know
5420: 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66  s to handle diff
5430: 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 20 0a 2a  erently.  Any .*
5440: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
5450: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
5460: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
5470: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
5480: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
5490: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
54a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
54b0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
54c0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
54d0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
54e0: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
54f0: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
5500: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
5510: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
5520: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
5530: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
5540: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
5550: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
5560: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
5570: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
5580: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
5590: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
55a0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
55b0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
55c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
55d0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
55e0: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
55f0: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
5600: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
5610: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
5620: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
5630: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
5640: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
5650: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
5660: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
5670: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
5680: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
5690: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
56a0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
56b0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
56c0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
56d0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
56e0: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
56f0: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
5700: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
5710: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
5720: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
5730: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
5740: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
5750: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
5760: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
5770: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
5780: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
5790: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
57a0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
57b0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
57c0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
57d0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
57e0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
57f0: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
5800: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
5810: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
5820: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
5830: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
5840: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
5850: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
5860: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
5870: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
5880: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
5890: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
58a0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
58b0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
58c0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
58d0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
58e0: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
58f0: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
5900: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
5910: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
5920: 57 53 44 20 0a 20 20 23 64 65 66 69 6e 65 20 47  WSD .  #define G
5930: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
5940: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
5950: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
5960: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
5970: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
5980: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
5990: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
59a0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
59b0: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
59c0: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
59d0: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
59e0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
59f0: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
5a00: 61 74 65 6c 79 20 0a 2a 2a 20 6c 65 66 74 20 75  ately .** left u
5a10: 6e 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65  nused within the
5a20: 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74   body of a funct
5a30: 69 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c  ion. This usuall
5a40: 79 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a  y happens when.*
5a50: 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  * a function is 
5a60: 63 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e  called via a fun
5a70: 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46  ction pointer. F
5a80: 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 65 20 0a  or example the .
5a90: 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
5aa0: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72  n of an SQL aggr
5ab0: 65 67 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62  egate step callb
5ac0: 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20  ack may not use 
5ad0: 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  the.** parameter
5ae0: 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20   indicating the 
5af0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
5b00: 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  nts passed to th
5b10: 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20  e aggregate,.** 
5b20: 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74  if it knows that
5b30: 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65   this is enforce
5b40: 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a  d elsewhere..**.
5b50: 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69  ** When a functi
5b60: 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  on parameter is 
5b70: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20  not used at all 
5b80: 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20  within the body 
5b90: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a  of a function,.*
5ba0: 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c  * it is generall
5bb0: 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64  y named "NotUsed
5bc0: 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20  " or "NotUsed2" 
5bd0: 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65  to make things e
5be0: 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20  ven clearer..** 
5bf0: 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d  However, these m
5c00: 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62  acros may also b
5c10: 65 20 75 73 65 64 20 74 6f 20 73 75 70 70 72 65  e used to suppre
5c20: 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61  ss warnings rela
5c30: 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65  ted to.** parame
5c40: 74 65 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72  ters that may or
5c50: 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64   may not be used
5c60: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f   depending on co
5c70: 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  mpilation option
5c80: 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c  s..** For exampl
5c90: 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65  e those paramete
5ca0: 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20  rs only used in 
5cb0: 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
5cc0: 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a  nts. In these.**
5cd0: 20 63 61 73 65 73 20 74 68 65 20 70 61 72 61 6d   cases the param
5ce0: 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20  eters are named 
5cf0: 61 73 20 70 65 72 20 74 68 65 20 75 73 75 61 6c  as per the usual
5d00: 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f   conventions..*/
5d10: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
5d20: 50 41 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f  PARAMETER(x) (vo
5d30: 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55  id)(x).#define U
5d40: 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32  NUSED_PARAMETER2
5d50: 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52  (x,y) UNUSED_PAR
5d60: 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44  AMETER(x),UNUSED
5d70: 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f  _PARAMETER(y)../
5d80: 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66  *.** Forward ref
5d90: 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63  erences to struc
5da0: 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66  tures.*/.typedef
5db0: 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20   struct AggInfo 
5dc0: 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  AggInfo;.typedef
5dd0: 20 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74   struct AuthCont
5de0: 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b  ext AuthContext;
5df0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5e00: 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f  AutoincInfo Auto
5e10: 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  incInfo;.typedef
5e20: 20 73 74 72 75 63 74 20 42 69 74 76 65 63 20 42   struct Bitvec B
5e30: 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73  itvec;.typedef s
5e40: 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f  truct CollSeq Co
5e50: 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73  llSeq;.typedef s
5e60: 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c  truct Column Col
5e70: 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  umn;.typedef str
5e80: 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64  uct Db Db;.typed
5e90: 65 66 20 73 74 72 75 63 74 20 53 63 68 65 6d 61  ef struct Schema
5ea0: 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66   Schema;.typedef
5eb0: 20 73 74 72 75 63 74 20 45 78 70 72 20 45 78 70   struct Expr Exp
5ec0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
5ed0: 74 20 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c  t ExprList ExprL
5ee0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5ef0: 75 63 74 20 45 78 70 72 53 70 61 6e 20 45 78 70  uct ExprSpan Exp
5f00: 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73  rSpan;.typedef s
5f10: 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b  truct FKey FKey;
5f20: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5f30: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46  FuncDestructor F
5f40: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74  uncDestructor;.t
5f50: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f60: 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74  ncDef FuncDef;.t
5f70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
5f80: 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63 44 65  ncDefHash FuncDe
5f90: 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73  fHash;.typedef s
5fa0: 74 72 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c  truct IdList IdL
5fb0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
5fc0: 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b  uct Index Index;
5fd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
5fe0: 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65  IndexSample Inde
5ff0: 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66  xSample;.typedef
6000: 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73   struct KeyClass
6010: 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64   KeyClass;.typed
6020: 65 66 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66  ef struct KeyInf
6030: 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64  o KeyInfo;.typed
6040: 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  ef struct Lookas
6050: 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74  ide Lookaside;.t
6060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
6070: 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b  okasideSlot Look
6080: 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64  asideSlot;.typed
6090: 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  ef struct Module
60a0: 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66   Module;.typedef
60b0: 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74   struct NameCont
60c0: 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b  ext NameContext;
60d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
60e0: 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70  Parse Parse;.typ
60f0: 65 64 65 66 20 73 74 72 75 63 74 20 50 72 65 55  edef struct PreU
6100: 70 64 61 74 65 20 50 72 65 55 70 64 61 74 65 3b  pdate PreUpdate;
6110: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6120: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
6130: 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b  PrintfArguments;
6140: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6150: 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
6160: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
6170: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
6180: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
6190: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
61a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
61b0: 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63  SelectDest Selec
61c0: 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73  tDest;.typedef s
61d0: 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53 72  truct SrcList Sr
61e0: 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  cList;.typedef s
61f0: 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 53  truct StrAccum S
6200: 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66  trAccum;.typedef
6210: 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54 61   struct Table Ta
6220: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
6230: 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61  uct TableLock Ta
6240: 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66  bleLock;.typedef
6250: 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f   struct Token To
6260: 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ken;.typedef str
6270: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
6280: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
6290: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
62a0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
62b0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
62c0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
62d0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
62e0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
62f0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
6300: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6310: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
6320: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
6330: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
6340: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
6350: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
6360: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
6370: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
6380: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
6390: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 0a 2a  With With;../*.*
63a0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
63b0: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
63c0: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
63d0: 74 68 65 20 22 75 38 22 20 61 6e 64 20 0a 2a 2a  the "u8" and .**
63e0: 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74   "BusyHandler" t
63f0: 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20  ypedefs. vdbe.h 
6400: 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20  also requires a 
6410: 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75  few of the opaqu
6420: 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70  e.** pointer typ
6430: 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66  es (i.e. FuncDef
6440: 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e  ) defined above.
6450: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74  .*/.#include "bt
6460: 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ree.h".#include 
6470: 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64  "vdbe.h".#includ
6480: 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63  e "pager.h".#inc
6490: 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a  lude "pcache.h".
64a0: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
64b0: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
64c0: 2e 68 22 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  .h".../*.** Each
64d0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
64e0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
64f0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
6500: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
6510: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
6520: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
6530: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
6540: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
6550: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
6560: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
6570: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
6580: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
6590: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
65a0: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
65b0: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
65c0: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
65d0: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
65e0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
65f0: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
6600: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
6610: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
6620: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
6630: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
6640: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
6650: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
6660: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
6670: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
6680: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
6690: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
66a0: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
66b0: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
66c0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
66d0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
66e0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
66f0: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
6700: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
6710: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
6720: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
6730: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
6740: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
6750: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
6760: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
6770: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
6780: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
6790: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
67a0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
67b0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
67c0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
67d0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
67e0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
67f0: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
6800: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
6810: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
6820: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
6830: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
6840: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
6850: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
6860: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
6870: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
6880: 74 2e 0a 2a 2a 20 0a 2a 2a 20 53 63 68 65 6d 61  t..** .** Schema
6890: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74   objects are aut
68a0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c  omatically deall
68b0: 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20  ocated when the 
68c0: 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a  last Btree that.
68d0: 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68  ** references th
68e0: 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e  em is destroyed.
68f0: 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65     The TEMP Sche
6900: 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66  ma is manually f
6910: 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  reed by.** sqlit
6920: 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a  e3_close()..*.**
6930: 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62   A thread must b
6940: 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  e holding a mute
6950: 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  x on the corresp
6960: 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20  onding Btree in 
6970: 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65  order.** to acce
6980: 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e  ss Schema conten
6990: 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73  t.  This implies
69a0: 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64   that the thread
69b0: 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a   must also be.**
69c0: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
69d0: 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20   on the sqlite3 
69e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74  connection point
69f0: 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65  er that owns the
6a00: 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61   Btree..** For a
6a10: 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e   TEMP Schema, on
6a20: 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ly the connectio
6a30: 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69  n mutex is requi
6a40: 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  red..*/.struct S
6a50: 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63  chema {.  int sc
6a60: 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f  hema_cookie;   /
6a70: 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d  * Database schem
6a80: 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
6a90: 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a   for this file *
6aa0: 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74  /.  int iGenerat
6ab0: 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65  ion;     /* Gene
6ac0: 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20  ration counter. 
6ad0: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
6ae0: 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f  h each change */
6af0: 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b  .  Hash tblHash;
6b00: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74          /* All t
6b10: 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79  ables indexed by
6b20: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
6b30: 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20  idxHash;        
6b40: 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69  /* All (named) i
6b50: 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62  ndices indexed b
6b60: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
6b70: 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20   trigHash;      
6b80: 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73   /* All triggers
6b90: 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65   indexed by name
6ba0: 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48   */.  Hash fkeyH
6bb0: 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c  ash;       /* Al
6bc0: 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62  l foreign keys b
6bd0: 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  y referenced tab
6be0: 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62  le name */.  Tab
6bf0: 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20  le *pSeqTab;    
6c00: 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f    /* The sqlite_
6c10: 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75  sequence table u
6c20: 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45  sed by AUTOINCRE
6c30: 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c  MENT */.  u8 fil
6c40: 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f  e_format;      /
6c50: 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20  * Schema format 
6c60: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73  version for this
6c70: 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e   file */.  u8 en
6c80: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
6c90: 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67  /* Text encoding
6ca0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61   used by this da
6cb0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20  tabase */.  u16 
6cc0: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
6cd0: 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69   /* Flags associ
6ce0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73  ated with this s
6cf0: 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63  chema */.  int c
6d00: 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20  ache_size;      
6d10: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
6d20: 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65  es to use in the
6d30: 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   cache */.};../*
6d40: 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
6d50: 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
6d60: 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
6d70: 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 20  ear bits in the 
6d80: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
6d90: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
6da0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
6db0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
6dc0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
6dd0: 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 28 50  Schema->flags&(P
6de0: 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
6df0: 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72 74   DbHasAnyPropert
6e00: 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29 2d  y(D,I,P)  (((D)-
6e10: 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[I].pSchema-
6e20: 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
6e30: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
6e40: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
6e50: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
6e60: 68 65 6d 61 2d 3e 66 6c 61 67 73 7c 3d 28 50 29  hema->flags|=(P)
6e70: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
6e80: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
6e90: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
6ea0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 26 3d 7e 28  chema->flags&=~(
6eb0: 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  P)../*.** Allowe
6ec0: 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  d values for the
6ed0: 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61   DB.pSchema->fla
6ee0: 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20  gs field..**.** 
6ef0: 54 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  The DB_SchemaLoa
6f00: 64 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ded flag is set 
6f10: 61 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61  after the databa
6f20: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  se schema has be
6f30: 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20  en.** read into 
6f40: 69 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61  internal hash ta
6f50: 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55  bles..**.** DB_U
6f60: 6e 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e  nresetViews mean
6f70: 73 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f  s that one or mo
6f80: 72 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f  re views have co
6f90: 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a  lumn names that.
6fa0: 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c  ** have been fil
6fb0: 6c 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65  led out.  If the
6fc0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c   schema changes,
6fd0: 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61   these column na
6fe0: 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61  mes might.** cha
6ff0: 6e 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20  nges and so the 
7000: 76 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74  view will need t
7010: 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23  o be reset..*/.#
7020: 64 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61  define DB_Schema
7030: 4c 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31  Loaded    0x0001
7040: 20 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20    /* The schema 
7050: 68 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  has been loaded 
7060: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e  */.#define DB_Un
7070: 72 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78  resetViews    0x
7080: 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69  0002  /* Some vi
7090: 65 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64  ews have defined
70a0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f   column names */
70b0: 0a 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74  .#define DB_Empt
70c0: 79 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30  y           0x00
70d0: 30 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20  04  /* The file 
70e0: 69 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68  is empty (length
70f0: 20 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a   0 bytes) */../*
7100: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
7110: 66 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64  f different kind
7120: 73 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74  s of things that
7130: 20 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a   can be limited.
7140: 2a 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c  ** using the sql
7150: 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74  ite3_limit() int
7160: 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69  erface..*/.#defi
7170: 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  ne SQLITE_N_LIMI
7180: 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  T (SQLITE_LIMIT_
7190: 54 52 49 47 47 45 52 5f 44 45 50 54 48 2b 31 29  TRIGGER_DEPTH+1)
71a0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
71b0: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
71c0: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
71d0: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
71e0: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
71f0: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
7200: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
7210: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
7220: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
7230: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
7240: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7250: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7260: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
7270: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
7280: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
7290: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
72a0: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
72b0: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
72c0: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
72d0: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
72e0: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
72f0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
7300: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
7310: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
7320: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
7330: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
7340: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
7350: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
7360: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
7370: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
7380: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
7390: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
73a0: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
73b0: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
73c0: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
73d0: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
73e0: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
73f0: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
7400: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
7410: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
7420: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
7430: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
7440: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
7450: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7460: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
7470: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
7480: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
7490: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
74a0: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
74b0: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
74c0: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
74d0: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
74e0: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
74f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
7500: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
7510: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
7520: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
7530: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
7540: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
7550: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
7560: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
7570: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
7580: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
7590: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
75a0: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
75b0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
75c0: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
75d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
75e0: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
75f0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
7600: 20 62 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20   bEnabled;      
7610: 20 20 20 20 20 20 2f 2a 20 46 61 6c 73 65 20 74        /* False t
7620: 6f 20 64 69 73 61 62 6c 65 20 6e 65 77 20 6c 6f  o disable new lo
7630: 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69  okaside allocati
7640: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c  ons */.  u8 bMal
7650: 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20 20  loced;          
7660: 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74 61   /* True if pSta
7670: 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  rt obtained from
7680: 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28   sqlite3_malloc(
7690: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b  ) */.  int nOut;
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
76b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66  * Number of buff
76c0: 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68  ers currently ch
76d0: 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69  ecked out */.  i
76e0: 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20  nt mxOut;       
76f0: 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61         /* Highwa
7700: 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75  ter mark for nOu
7710: 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61  t */.  int anSta
7720: 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f  t[3];          /
7730: 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73  * 0: hits.  1: s
7740: 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20  ize misses.  2: 
7750: 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20  full misses */. 
7760: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
7770: 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74  pFree;   /* List
7780: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75   of available bu
7790: 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20  ffers */.  void 
77a0: 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20 20  *pStart;        
77b0: 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65     /* First byte
77c0: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65   of available me
77d0: 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20  mory space */.  
77e0: 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20  void *pEnd;     
77f0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
7800: 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f   byte past end o
7810: 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63  f available spac
7820: 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c  e */.};.struct L
7830: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20  ookasideSlot {. 
7840: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a   LookasideSlot *
7850: 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78  pNext;    /* Nex
7860: 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65 20  t buffer in the 
7870: 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75 66  list of free buf
7880: 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  fers */.};../*.*
7890: 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20 66  * A hash table f
78a0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  or function defi
78b0: 6e 69 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 48  nitions..**.** H
78c0: 61 73 68 20 65 61 63 68 20 46 75 6e 63 44 65 66  ash each FuncDef
78d0: 20 73 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20   structure into 
78e0: 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44  one of the FuncD
78f0: 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73  efHash.a[] slots
7900: 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20  ..** Collisions 
7910: 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44  are on the FuncD
7920: 65 66 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  ef.pHash chain..
7930: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
7940: 66 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65  fHash {.  FuncDe
7950: 66 20 2a 61 5b 32 33 5d 3b 20 20 20 20 20 20 20  f *a[23];       
7960: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
7970: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
7980: 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  ;../*.** Each da
7990: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
79a0: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
79b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
79c0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
79d0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
79e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
79f0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
7a00: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
7a10: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
7a20: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
7a30: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
7a40: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
7a50: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
7a60: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
7a70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
7a80: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
7a90: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
7aa0: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
7ab0: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
7ac0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
7ad0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
7ae0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7b00: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
7b10: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
7b40: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
7b50: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
7b60: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
7b80: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
7b90: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
7ba0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
7bb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
7bc0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
7bd0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
7be0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
7bf0: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7c10: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
7c20: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
7c30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
7c40: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
7c50: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
7c60: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
7c70: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
7c80: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
7c90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
7ca0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
7cb0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
7cc0: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
7cf0: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
7d00: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
7d10: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
7d20: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
7d30: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
7d40: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
7d50: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
7d60: 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20  8 autoCommit;   
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
7d80: 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  The auto-commit 
7d90: 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65  flag. */.  u8 te
7da0: 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20  mp_store;       
7db0: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66           /* 1: f
7dc0: 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a  ile 2: memory 0:
7dd0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
7de0: 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20   mallocFailed;  
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
7e00: 72 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73  rue if we have s
7e10: 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69  een a malloc fai
7e20: 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  lure */.  u8 dfl
7e30: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
7e40: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
7e50: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
7e60: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
7e70: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
7e80: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
7e90: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
7ea0: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
7eb0: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
7ec0: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7ee0: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
7ef0: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
7f00: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
7f10: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
7f20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
7f30: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
7f40: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
7f50: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
7f60: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
7f70: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
7f80: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
7f90: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
7fa0: 54 53 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74  TS */.  int next
7fb0: 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20  Pagesize;       
7fc0: 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a        /* Pagesiz
7fd0: 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  e after VACUUM i
7fe0: 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61  f >0 */.  u32 ma
7ff0: 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  gic;            
8000: 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63          /* Magic
8010: 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65   number for dete
8020: 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73  ct library misus
8030: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e  e */.  int nChan
8040: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
8050: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
8060: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
8070: 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  3_changes() */. 
8080: 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67   int nTotalChang
8090: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
80a0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
80b0: 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61   by sqlite3_tota
80c0: 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20  l_changes() */. 
80d0: 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49   int aLimit[SQLI
80e0: 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f  TE_N_LIMIT];   /
80f0: 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 73 74  * Limits */.  st
8100: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
8110: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
8120: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
8130: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
8140: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
8150: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
8160: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
8170: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
8180: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
8190: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
81c0: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
81d0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
81e0: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
8200: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
8210: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
8220: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
8230: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
8240: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
8250: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
8260: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
8270: 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e   } init;.  int n
8280: 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20  VdbeActive;     
8290: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
82a0: 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72  er of VDBEs curr
82b0: 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f  ently running */
82c0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64  .  int nVdbeRead
82d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
82e0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
82f0: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8300: 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
8310: 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74  .  int nVdbeWrit
8320: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
8330: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
8340: 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20  tive VDBEs that 
8350: 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a  read and write *
8360: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65  /.  int nVdbeExe
8370: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
8380: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
8390: 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56  ested calls to V
83a0: 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69  dbeExec() */.  i
83b0: 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20  nt nExtension;  
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
83d0: 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64  Number of loaded
83e0: 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20   extensions */. 
83f0: 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69   void **aExtensi
8400: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  on;            /
8410: 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65  * Array of share
8420: 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65  d library handle
8430: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 54  s */.  void (*xT
8440: 72 61 63 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73  race)(void*,cons
8450: 74 20 63 68 61 72 2a 29 3b 20 20 20 20 20 20 20  t char*);       
8460: 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69   /* Trace functi
8470: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54  on */.  void *pT
8480: 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20  raceArg;        
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
84b0: 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74   the trace funct
84c0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
84d0: 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c  xProfile)(void*,
84e0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29  const char*,u64)
84f0: 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20  ;  /* Profiling 
8500: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
8510: 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b  id *pProfileArg;
8520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8530: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
8540: 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66  ent to profile f
8550: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
8560: 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20  d *pCommitArg;  
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8580: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  * Argument to xC
8590: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20  ommitCallback() 
85a0: 2a 2f 20 20 20 0a 20 20 69 6e 74 20 28 2a 78 43  */   .  int (*xC
85b0: 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76  ommitCallback)(v
85c0: 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76  oid*);    /* Inv
85d0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
85e0: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
85f0: 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20  *pRollbackArg;  
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
8610: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c  Argument to xRol
8620: 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20  lbackCallback() 
8630: 2a 2f 20 20 20 0a 20 20 76 6f 69 64 20 28 2a 78  */   .  void (*x
8640: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
8650: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
8660: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
8670: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
8680: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
8690: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
86a0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
86b0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
86c0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
86d0: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
86e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
86f0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
8700: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
8710: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
8720: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
8730: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
8740: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
8750: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
8760: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
8770: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
8780: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
8790: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
87a0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
87b0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
87c0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
87d0: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
87e0: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
87f0: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
8800: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
8810: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
8820: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
8830: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
8840: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
8850: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
8860: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8870: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
8880: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
8890: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
88a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
88b0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
88c0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
88d0: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
88e0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
88f0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
8900: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
8910: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
8920: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
8930: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
8940: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
8950: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
8960: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
8970: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
8980: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
8990: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
89a0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
89b0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
89c0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
89d0: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
89e0: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
89f0: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
8a00: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
8a10: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
8a20: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
8a30: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
8a40: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
8a50: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
8a60: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
8a70: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
8a80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
8a90: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 69 6e 74 20  ORIZATION.  int 
8aa0: 28 2a 78 41 75 74 68 29 28 76 6f 69 64 2a 2c 69  (*xAuth)(void*,i
8ab0: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
8ac0: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
8ad0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
8ae0: 72 2a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r*);.           
8af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8b00: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
8b10: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
8b20: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
8b30: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
8b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
8b50: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
8b60: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
8b70: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
8b80: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8b90: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
8ba0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
8bb0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
8bc0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
8bd0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
8be0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
8bf0: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
8c00: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
8c10: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
8c20: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
8c30: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
8c40: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
8c50: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
8c60: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
8c70: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
8c80: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8c90: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
8ca0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8cc0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
8cd0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
8ce0: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8d00: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
8d10: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
8d20: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
8d30: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
8d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
8d50: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
8d60: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
8d70: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
8d80: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
8d90: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
8da0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
8db0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
8dc0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
8dd0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
8de0: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
8df0: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
8e00: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
8e10: 6e 64 69 66 0a 20 20 46 75 6e 63 44 65 66 48 61  ndif.  FuncDefHa
8e20: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
8e30: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
8e40: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
8e50: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
8e60: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8e80: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
8e90: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
8ea0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
8eb0: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
8ec0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
8ed0: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
8ee0: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
8ef0: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
8f00: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
8f10: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
8f20: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
8f30: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
8f40: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
8f50: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
8f60: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
8f80: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
8f90: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
8fa0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
8fb0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
8fc0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
8fd0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
8fe0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
8ff0: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
9000: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
9010: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
9020: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
9030: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
9040: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
9050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
9060: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
9070: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
9080: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
9090: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
90a0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
90b0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
90c0: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
90d0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
90e0: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
90f0: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
9100: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
9110: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
9120: 20 2a 2f 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   */..#ifdef SQLI
9130: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
9140: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
9150: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
9160: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
9170: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
9180: 41 54 49 43 5f 4d 41 53 54 45 52 20 0a 20 20 2a  ATIC_MASTER .  *
9190: 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20  * mutex, not by 
91a0: 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54  sqlite3.mutex. T
91b0: 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20  hey are used by 
91c0: 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63  code in notify.c
91d0: 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  . .  **.  ** Whe
91e0: 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  n X.pUnlockConne
91f0: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
9200: 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77  eans that X is w
9210: 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a  aiting for Y to.
9220: 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74    ** unlock so t
9230: 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65  hat it can proce
9240: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  ed..  **.  ** Wh
9250: 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f  en X.pBlockingCo
9260: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
9270: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d  t means that som
9280: 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72  ething that X tr
9290: 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74  ied.  ** tried t
92a0: 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61  o do recently fa
92b0: 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c  iled with an SQL
92c0: 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72  ITE_LOCKED error
92d0: 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20   due to locks.  
92e0: 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20  ** held by Y..  
92f0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42  */.  sqlite3 *pB
9300: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
9310: 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e  n; /* Connection
9320: 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c   that caused SQL
9330: 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20  ITE_LOCKED */.  
9340: 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b  sqlite3 *pUnlock
9350: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20  Connection;     
9360: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
9370: 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72  ion to watch for
9380: 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69   unlock */.  voi
9390: 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20  d *pUnlockArg;  
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93b0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
93c0: 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20  o xUnlockNotify 
93d0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c  */.  void (*xUnl
93e0: 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20  ockNotify)(void 
93f0: 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e  **, int);  /* Un
9400: 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c  lock notify call
9410: 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  back */.  sqlite
9420: 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b  3 *pNextBlocked;
9430: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
9440: 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62  in list of all b
9450: 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f  locked connectio
9460: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ns */.#endif.};.
9470: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
9480: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
9490: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
94a0: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
94b0: 65 20 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  e ENC(db) ((db)-
94c0: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
94d0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
94e0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
94f0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
9500: 67 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  gs..*/.#define S
9510: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
9520: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20       0x00000001 
9530: 20 2f 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63   /* True to trac
9540: 65 20 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e  e VDBE execution
9550: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
9560: 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
9570: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
9580: 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73   Uncommitted Has
9590: 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20  h table changes 
95a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
95b0: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
95c0: 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20   0x00000004  /* 
95d0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
95e0: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
95f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9600: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
9610: 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73  x00000008  /* Us
9620: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
9630: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
9640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
9650: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
9660: 30 30 30 30 30 31 30 20 20 2f 2a 20 4f 4b 20 74  0000010  /* OK t
9670: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
9680: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
9690: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
96a0: 65 73 20 20 20 30 78 30 30 30 30 30 30 32 30 20  es   0x00000020 
96b0: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
96c0: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
96d0: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
96e0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
96f0: 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30  ames  0x00000040
9700: 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20    /* Show short 
9710: 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f  columns names */
9720: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9730: 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30  CountRows      0
9740: 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f  x00000080  /* Co
9750: 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64  unt rows changed
9760: 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20   by INSERT, */. 
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9790: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45           /*   DE
97a0: 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
97b0: 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20  and return */.  
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97e0: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65          /*   the
97f0: 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63   count using a c
9800: 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66  allback. */.#def
9810: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ine SQLITE_NullC
9820: 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30  allback   0x0000
9830: 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  0100  /* Invoke 
9840: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63  the callback onc
9850: 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20  e if the */.    
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c        /*   resul
9890: 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a  t set is empty *
98a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
98b0: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
98c0: 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44  0x00000200  /* D
98d0: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
98e0: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
98f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9900: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
9910: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 44 65  x00000400  /* De
9920: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
9930: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
9940: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9950: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
9960: 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4f 4b  x00000800  /* OK
9970: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
9980: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
9990: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
99a0: 64 64 6f 70 54 72 61 63 65 20 30 78 30 30 30 30  ddopTrace 0x0000
99b0: 31 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  1000  /* Trace s
99c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
99d0: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
99e0: 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65  ne SQLITE_Ignore
99f0: 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30 32  Checks   0x00002
9a00: 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 65  000  /* Do not e
9a10: 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f 6e  nforce check con
9a20: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
9a30: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64 55  ine SQLITE_ReadU
9a40: 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78 30 30 30  ncommitted 0x000
9a50: 34 30 30 30 20 20 2f 2a 20 46 6f 72 20 73 68 61  4000  /* For sha
9a60: 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
9a70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9a80: 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20  _LegacyFileFmt  
9a90: 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20 43  0x00008000  /* C
9aa0: 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61  reate new databa
9ab0: 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20  ses in format 1 
9ac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9ad0: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 20  E_RecoveryMode  
9ae0: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
9af0: 49 67 6e 6f 72 65 20 73 63 68 65 6d 61 20 65 72  Ignore schema er
9b00: 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
9b10: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
9b20: 64 65 72 20 20 20 30 78 30 30 30 32 30 30 30 30  der   0x00020000
9b30: 20 20 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f    /* Reverse uno
9b40: 72 64 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a  rdered SELECTs *
9b50: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
9b60: 5f 52 65 63 54 72 69 67 67 65 72 73 20 20 20 20  _RecTriggers    
9b70: 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 45  0x00040000  /* E
9b80: 6e 61 62 6c 65 20 72 65 63 75 72 73 69 76 65 20  nable recursive 
9b90: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
9ba0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69  ine SQLITE_Forei
9bb0: 67 6e 4b 65 79 73 20 20 20 20 30 78 30 30 30 38  gnKeys    0x0008
9bc0: 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65  0000  /* Enforce
9bd0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
9be0: 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65  straints  */.#de
9bf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f  fine SQLITE_Auto
9c00: 49 6e 64 65 78 20 20 20 20 20 20 30 78 30 30 31  Index      0x001
9c10: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
9c20: 20 61 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78   automatic index
9c30: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
9c40: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
9c50: 69 6e 20 20 30 78 30 30 32 30 30 30 30 30 20 20  in  0x00200000  
9c60: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
9c70: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
9c80: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9c90: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
9ca0: 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a 20   0x00400000  /* 
9cb0: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
9cc0: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
9cd0: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
9ce0: 69 67 67 65 72 20 20 30 78 30 30 38 30 30 30 30  igger  0x0080000
9cf0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
9d00: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
9d10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
9d20: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
9d30: 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x01000000  /* De
9d40: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
9d50: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
9d60: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
9d70: 6c 79 20 20 20 20 20 20 30 78 30 32 30 30 30 30  ly      0x020000
9d80: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
9d90: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
9da0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
9db0: 45 5f 56 64 62 65 45 51 50 20 20 20 20 20 20 20  E_VdbeEQP       
9dc0: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
9dd0: 44 65 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55  Debug EXPLAIN QU
9de0: 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 0a 0a 2f 2a  ERY PLAN */.../*
9df0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
9e00: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
9e10: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
9e20: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
9e30: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
9e40: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
9e50: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
9e60: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
9e70: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
9e80: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
9e90: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
9ea0: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
9eb0: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
9ec0: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
9ed0: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
9ee0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
9ef0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
9f00: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
9f10: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
9f20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
9f30: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
9f40: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
9f50: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
9f60: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
9f70: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
9f80: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
9f90: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
9fa0: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
9fb0: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
9fc0: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
9fd0: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
9fe0: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
9ff0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
a000: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
a010: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
a020: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
a030: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
a040: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
a050: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
a060: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
a070: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a080: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
a090: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
a0a0: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
a0b0: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
a0c0: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
a0d0: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
a0e0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
a0f0: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
a100: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
a110: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
a120: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
a130: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
a140: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
a150: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
a160: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
a170: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
a180: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
a190: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
a1a0: 4c 49 54 45 5f 53 74 61 74 33 20 20 20 20 20 20  LITE_Stat3      
a1b0: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
a1c0: 55 73 65 20 74 68 65 20 53 51 4c 49 54 45 5f 53  Use the SQLITE_S
a1d0: 54 41 54 33 20 74 61 62 6c 65 20 2a 2f 0a 23 64  TAT3 table */.#d
a1e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 64 6a  efine SQLITE_Adj
a1f0: 75 73 74 4f 75 74 45 73 74 20 20 20 30 78 31 30  ustOutEst   0x10
a200: 30 30 20 20 20 2f 2a 20 41 64 6a 75 73 74 20 6f  00   /* Adjust o
a210: 75 74 70 75 74 20 65 73 74 69 6d 61 74 65 73 20  utput estimates 
a220: 75 73 69 6e 67 20 57 48 45 52 45 20 2a 2f 0a 23  using WHERE */.#
a230: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
a240: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
a250: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
a260: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
a270: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
a280: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
a290: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
a2a0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
a2b0: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
a2c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a2d0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
a2e0: 54 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  T.#define Optimi
a2f0: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
a300: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
a310: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
a320: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
a330: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
a340: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
a350: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
a360: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
a370: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 70  #else.#define Op
a380: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
a390: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 30 0a  ed(db, mask)  0.
a3a0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
a3b0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
a3c0: 6d 61 73 6b 29 20 20 20 31 0a 23 65 6e 64 69 66  mask)   1.#endif
a3d0: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
a3e0: 72 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20  rue if it OK to 
a3f0: 66 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20  factor constant 
a400: 65 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f  expressions into
a410: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
a420: 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65  ion.** code. The
a430: 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
a440: 61 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20  arse object for 
a450: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
a460: 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  or..*/.#define C
a470: 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20  onstFactorOk(P) 
a480: 5c 0a 20 20 28 28 50 29 2d 3e 63 6f 6f 6b 69 65  \.  ((P)->cookie
a490: 47 6f 74 6f 3e 30 20 26 26 20 4f 70 74 69 6d 69  Goto>0 && Optimi
a4a0: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 28 50  zationEnabled((P
a4b0: 29 2d 3e 64 62 2c 53 51 4c 49 54 45 5f 46 61 63  )->db,SQLITE_Fac
a4c0: 74 6f 72 4f 75 74 43 6f 6e 73 74 29 29 0a 0a 2f  torOutConst))../
a4d0: 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61  *.** Possible va
a4e0: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c  lues for the sql
a4f0: 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e  ite.magic field.
a500: 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20  .** The numbers 
a510: 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20  are obtained at 
a520: 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20  random and have 
a530: 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  no special meani
a540: 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61  ng, other.** tha
a550: 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74  n being distinct
a560: 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65   from one anothe
a570: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  r..*/.#define SQ
a580: 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20  LITE_MAGIC_OPEN 
a590: 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20      0xa029a697  
a5a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f  /* Database is o
a5b0: 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pen */.#define S
a5c0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53  QLITE_MAGIC_CLOS
a5d0: 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20  ED   0x9f3c2d33 
a5e0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
a5f0: 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  closed */.#defin
a600: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53  e SQLITE_MAGIC_S
a610: 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32  ICK     0x4b7712
a620: 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64  90  /* Error and
a630: 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20   awaiting close 
a640: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
a650: 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20  E_MAGIC_BUSY    
a660: 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20   0xf03b7906  /* 
a670: 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74  Database current
a680: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65  ly in use */.#de
a690: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a6a0: 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33  C_ERROR    0xb53
a6b0: 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c  57930  /* An SQL
a6c0: 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72  ITE_MISUSE error
a6d0: 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65   occurred */.#de
a6e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
a6f0: 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63  C_ZOMBIE   0x64c
a700: 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20  ffc7f  /* Close 
a710: 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d  with last statem
a720: 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a  ent close */../*
a730: 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e  .** Each SQL fun
a740: 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64  ction is defined
a750: 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
a760: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
a770: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20  .** structure.  
a780: 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
a790: 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 73  s structure is s
a7a0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c  tored in the sql
a7b0: 69 74 65 2e 61 46 75 6e 63 0a 2a 2a 20 68 61 73  ite.aFunc.** has
a7c0: 68 20 74 61 62 6c 65 2e 20 20 57 68 65 6e 20 6d  h table.  When m
a7d0: 75 6c 74 69 70 6c 65 20 66 75 6e 63 74 69 6f 6e  ultiple function
a7e0: 73 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20  s have the same 
a7f0: 6e 61 6d 65 2c 20 74 68 65 20 68 61 73 68 20 74  name, the hash t
a800: 61 62 6c 65 0a 2a 2a 20 70 6f 69 6e 74 73 20 74  able.** points t
a810: 6f 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  o a linked list 
a820: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
a830: 72 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  res..*/.struct F
a840: 75 6e 63 44 65 66 20 7b 0a 20 20 69 31 36 20 6e  uncDef {.  i16 n
a850: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
a860: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
a870: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
a880: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
a890: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
a8a0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
a8b0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
a8c0: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
a8d0: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
a8e0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
a8f0: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
a900: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
a910: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
a920: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
a930: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
a940: 28 2a 78 46 75 6e 63 29 28 73 71 6c 69 74 65 33  (*xFunc)(sqlite3
a950: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
a960: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
a970: 2f 2a 20 52 65 67 75 6c 61 72 20 66 75 6e 63 74  /* Regular funct
a980: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ion */.  void (*
a990: 78 53 74 65 70 29 28 73 71 6c 69 74 65 33 5f 63  xStep)(sqlite3_c
a9a0: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
a9b0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
a9c0: 20 41 67 67 72 65 67 61 74 65 20 73 74 65 70 20   Aggregate step 
a9d0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
a9e0: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
a9f0: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
aa00: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67 67 72           /* Aggr
aa10: 65 67 61 74 65 20 66 69 6e 61 6c 69 7a 65 72 20  egate finalizer 
aa20: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
aa30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ;         /* SQL
aa40: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
aa50: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 46 75 6e 63  ction. */.  Func
aa60: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
aa70: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
aa80: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
aa90: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
aaa0: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 73 74 72 75   */.  FuncDestru
aab0: 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f  ctor *pDestructo
aac0: 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63  r;   /* Referenc
aad0: 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75  e counted destru
aae0: 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ctor function */
aaf0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
ab00: 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70 73  structure encaps
ab10: 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66 75  ulates a user-fu
ab20: 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74 6f  nction destructo
ab30: 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a  r callback (as.*
ab40: 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73 69  * configured usi
ab50: 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ng create_functi
ab60: 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20 72  on_v2()) and a r
ab70: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 72  eference counter
ab80: 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65  . When.** create
ab90: 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69  _function_v2() i
aba0: 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65 61  s called to crea
abb0: 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77 69  te a function wi
abc0: 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72 2c  th a destructor,
abd0: 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a  .** a single obj
abe0: 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
abf0: 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46   is allocated. F
ac00: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e 52  uncDestructor.nR
ac10: 65 66 20 69 73 20 73 65 74 20 74 6f 20 0a 2a 2a  ef is set to .**
ac20: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
ac30: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
ac40: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
ac50: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
ac60: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
ac70: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
ac80: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
ac90: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
aca0: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
acb0: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
acc0: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
acd0: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
ace0: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
acf0: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
ad00: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
ad10: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
ad20: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
ad30: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
ad40: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
ad50: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
ad60: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
ad70: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
ad80: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
ad90: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
ada0: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
adb0: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
adc0: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
add0: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
ade0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
adf0: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
ae00: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
ae10: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
ae20: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
ae30: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
ae40: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
ae50: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
ae60: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
ae70: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
ae80: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
ae90: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
aea0: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
aeb0: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
aec0: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 54 68 65  _TYPEOFARG.  The
aed0: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
aee0: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
aef0: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
af00: 69 66 79 20 74 68 69 73 2e 0a 2a 2f 0a 23 64 65  ify this..*/.#de
af10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
af20: 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 33 20  _ENCMASK  0x003 
af30: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  /* SQLITE_UTF8, 
af40: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f  SQLITE_UTF16BE o
af50: 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65  r UTF16LE */.#de
af60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
af70: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 34 20  _LIKE     0x004 
af80: 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72  /* Candidate for
af90: 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69   the LIKE optimi
afa0: 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  zation */.#defin
afb0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41  e SQLITE_FUNC_CA
afc0: 53 45 20 20 20 20 20 30 78 30 30 38 20 2f 2a 20  SE     0x008 /* 
afd0: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
afe0: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
aff0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
b000: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
b010: 20 20 30 78 30 31 30 20 2f 2a 20 45 70 68 65 6d    0x010 /* Ephem
b020: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
b030: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
b040: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
b050: 45 45 44 43 4f 4c 4c 20 30 78 30 32 30 20 2f 2a  EEDCOLL 0x020 /*
b060: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
b070: 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62  ollSeq() might b
b080: 65 20 63 61 6c 6c 65 64 20 2a 2f 0a 23 64 65 66  e called */.#def
b090: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
b0a0: 4c 45 4e 47 54 48 20 20 20 30 78 30 34 30 20 2f  LENGTH   0x040 /
b0b0: 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74  * Built-in lengt
b0c0: 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  h() function */.
b0d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
b0e0: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30  UNC_TYPEOF   0x0
b0f0: 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74  80 /* Built-in t
b100: 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
b110: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
b120: 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20  TE_FUNC_COUNT   
b130: 20 30 78 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d   0x100 /* Built-
b140: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
b150: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
b160: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
b170: 4c 45 53 43 45 20 30 78 32 30 30 20 2f 2a 20 42  LESCE 0x200 /* B
b180: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
b190: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
b1a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b1b0: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
b1c0: 78 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  x400 /* Built-in
b1d0: 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63   unlikely() func
b1e0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
b1f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
b200: 54 41 4e 54 20 30 78 38 30 30 20 2f 2a 20 43 6f  TANT 0x800 /* Co
b210: 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69  nstant inputs gi
b220: 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75  ve a constant ou
b230: 74 70 75 74 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tput */../*.** T
b240: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
b250: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
b260: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
b270: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
b280: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
b290: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
b2a0: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
b2b0: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
b2c0: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
b2d0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
b2e0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
b2f0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
b300: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
b310: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
b320: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
b330: 63 74 69 6f 6e 20 7a 4e 61 6d 65 20 0a 2a 2a 20  ction zName .** 
b340: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
b350: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
b360: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
b370: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
b380: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
b390: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
b3a0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
b3b0: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
b3c0: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
b3d0: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
b3e0: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
b3f0: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
b400: 75 6e 63 74 69 6f 6e 2e 20 49 66 20 0a 2a 2a 20  unction. If .** 
b410: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
b420: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
b430: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
b440: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
b450: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
b460: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
b470: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
b480: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
b490: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
b4a0: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
b4b0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
b4c0: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
b4d0: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
b4e0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
b4f0: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
b500: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
b510: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
b520: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
b530: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
b540: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
b550: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
b560: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
b570: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
b580: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
b590: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
b5a0: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
b5b0: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
b5c0: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
b5d0: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
b5e0: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
b5f0: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
b600: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
b610: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
b620: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
b630: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
b640: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
b650: 4e 61 6d 65 20 0a 2a 2a 20 20 20 20 20 74 68 61  Name .**     tha
b660: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
b670: 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20  rguments and is 
b680: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61  implemented by a
b690: 20 63 61 6c 6c 20 74 6f 20 43 20 0a 2a 2a 20 20   call to C .**  
b6a0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
b6b0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
b6c0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
b6d0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
b6e0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
b6f0: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
b700: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
b710: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
b720: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
b730: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
b740: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
b750: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
b760: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
b770: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
b780: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
b790: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
b7a0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
b7b0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
b7c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
b7d0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
b7e0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
b7f0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
b800: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b810: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b820: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b830: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b840: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
b850: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
b860: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
b870: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
b880: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
b890: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
b8a0: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
b8b0: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
b8c0: 6e 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65  nc, 0, 0, #zName
b8d0: 2c 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20  , 0, 0}.#define 
b8e0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
b8f0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
b900: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
b910: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
b920: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
b930: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
b940: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
b950: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
b960: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
b970: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
b980: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
b990: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 30 2c 20 30   0, #zName, 0, 0
b9a0: 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55  }.#define STR_FU
b9b0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
b9c0: 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78  rg, pArg, bNC, x
b9d0: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
b9e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
b9f0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
ba00: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
ba10: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
ba20: 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
ba30: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
ba40: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 4c   0, 0}.#define L
ba50: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
ba60: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
ba70: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
ba80: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
ba90: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
baa0: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
bab0: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
bac0: 63 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  c, 0, 0, #zName,
bad0: 20 30 2c 20 30 7d 0a 23 64 65 66 69 6e 65 20 41   0, 0}.#define A
bae0: 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20  GGREGATE(zName, 
baf0: 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78  nArg, arg, nc, x
bb00: 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a  Step, xFinal) \.
bb10: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
bb20: 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f  UTF8|(nc*SQLITE_
bb30: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
bb40: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
bb50: 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20  TO_PTR(arg), 0, 
bb60: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
bb70: 23 7a 4e 61 6d 65 2c 30 2c 30 7d 0a 0a 2f 2a 0a  #zName,0,0}../*.
bb80: 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
bb90: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
bba0: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
bbb0: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
bbc0: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
bbd0: 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
bbe0: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
bbf0: 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
bc00: 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
bc10: 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
bc20: 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
bc30: 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
bc40: 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
bc50: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
bc60: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
bc70: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
bc80: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
bcb0: 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
bcc0: 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
bcd0: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
bce0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bcf0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bd00: 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
bd10: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
bd20: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
bd30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bd40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
bd50: 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
bd60: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
bd70: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
bd80: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
bd90: 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
bda0: 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
bdb0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
bdc0: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
bdd0: 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
bde0: 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
bdf0: 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
be00: 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
be10: 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
be20: 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
be30: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
be40: 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
be50: 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
be60: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
be70: 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
be80: 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
be90: 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
bea0: 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
beb0: 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
bec0: 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
bed0: 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
bee0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
bef0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
bf00: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
bf10: 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
bf20: 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
bf30: 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
bf40: 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
bf50: 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
bf60: 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
bf70: 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
bf80: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
bf90: 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
bfa0: 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
bfb0: 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
bfc0: 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
bfd0: 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bff0: 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
c000: 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
c010: 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
c020: 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
c030: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
c040: 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
c050: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
c060: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
c070: 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
c080: 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
c090: 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
c0a0: 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
c0b0: 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
c0c0: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
c0d0: 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
c0e0: 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
c0f0: 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
c100: 6e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66  n */.  Expr *pDf
c110: 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75  lt;     /* Defau
c120: 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  lt value of this
c130: 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61   column */.  cha
c140: 72 20 2a 7a 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *zDflt;     /*
c150: 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f   Original text o
c160: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  f the default va
c170: 6c 75 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  lue */.  char *z
c180: 54 79 70 65 3b 20 20 20 20 20 2f 2a 20 44 61 74  Type;     /* Dat
c190: 61 20 74 79 70 65 20 66 6f 72 20 74 68 69 73 20  a type for this 
c1a0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
c1b0: 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
c1c0: 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
c1d0: 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
c1e0: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
c1f0: 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
c200: 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
c210: 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
c220: 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
c230: 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
c240: 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
c250: 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
c260: 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
c270: 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20  */.  u8 szEst;  
c280: 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
c290: 65 64 20 73 69 7a 65 20 6f 66 20 74 68 69 73 20  ed size of this 
c2a0: 63 6f 6c 75 6d 6e 2e 20 20 49 4e 54 3d 3d 31 20  column.  INT==1 
c2b0: 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73  */.  u8 colFlags
c2c0: 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  ;     /* Boolean
c2d0: 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
c2e0: 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
c2f0: 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
c300: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
c310: 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
c320: 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
c330: 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
c340: 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
c350: 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
c360: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
c370: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
c380: 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
c390: 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
c3a0: 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
c3b0: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
c3c0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
c3d0: 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
c3e0: 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
c3f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
c400: 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
c410: 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
c420: 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
c430: 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
c440: 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
c450: 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
c460: 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
c470: 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
c480: 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
c490: 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
c4a0: 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
c4b0: 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
c4c0: 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
c4d0: 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
c4e0: 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
c4f0: 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
c500: 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
c510: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
c520: 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
c530: 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
c540: 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
c550: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
c560: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
c570: 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
c580: 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
c590: 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
c5a0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c5b0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
c5c0: 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
c5d0: 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
c5e0: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
c5f0: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
c600: 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
c610: 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
c620: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
c630: 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
c640: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
c650: 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
c660: 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
c670: 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
c680: 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
c690: 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
c6a0: 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
c6b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
c6c0: 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
c6d0: 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
c6e0: 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
c6f0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
c700: 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
c710: 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
c720: 6f 72 64 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  order */../*.** 
c730: 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  Column affinity 
c740: 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  types..**.** The
c750: 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20  se used to have 
c760: 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69  mnemonic name li
c770: 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54  ke 'i' for SQLIT
c780: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e  E_AFF_INTEGER an
c790: 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c  d.** 't' for SQL
c7a0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42  ITE_AFF_TEXT.  B
c7b0: 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61  ut we can save a
c7c0: 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e   little space an
c7d0: 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65  d improve.** the
c7e0: 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20   speed a little 
c7f0: 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65  by numbering the
c800: 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74   values consecut
c810: 69 76 65 6c 79 2e 20 20 0a 2a 2a 0a 2a 2a 20 42  ively.  .**.** B
c820: 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
c830: 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
c840: 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
c850: 27 61 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'a'.  That way,.
c860: 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
c870: 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
c880: 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
c890: 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
c8a0: 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
c8b0: 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
c8c0: 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
c8d0: 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
c8e0: 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
c8f0: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
c900: 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
c910: 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
c920: 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
c930: 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
c940: 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
c950: 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
c960: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
c970: 20 20 20 27 61 27 0a 23 64 65 66 69 6e 65 20 53     'a'.#define S
c980: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 20  QLITE_AFF_NONE  
c990: 20 20 20 27 62 27 0a 23 64 65 66 69 6e 65 20 53     'b'.#define S
c9a0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
c9b0: 43 20 20 27 63 27 0a 23 64 65 66 69 6e 65 20 53  C  'c'.#define S
c9c0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
c9d0: 52 20 20 27 64 27 0a 23 64 65 66 69 6e 65 20 53  R  'd'.#define S
c9e0: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
c9f0: 20 20 20 27 65 27 0a 0a 23 64 65 66 69 6e 65 20     'e'..#define 
ca00: 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
ca10: 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
ca20: 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
ca30: 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
ca40: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
ca50: 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
ca60: 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
ca70: 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
ca80: 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
ca90: 20 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c   .*/.#define SQL
caa0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
cab0: 20 30 78 36 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x67../*.** Add
cac0: 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
cad0: 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
cae0: 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
caf0: 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
cb00: 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
cb10: 69 6e 69 74 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  inity..*/.#defin
cb20: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
cb30: 55 4c 4c 20 20 20 30 78 30 38 20 20 2f 2a 20 6a  ULL   0x08  /* j
cb40: 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
cb50: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
cb60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
cb70: 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
cb80: 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
cb90: 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
cba0: 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
cbb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
cbc0: 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
cbd0: 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
cbe0: 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
cbf0: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
cc00: 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
cc10: 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
cc20: 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
cc30: 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
cc40: 73 63 68 65 6d 61 2e 20 0a 2a 2a 0a 2a 2a 20 49  schema. .**.** I
cc50: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
cc60: 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
cc70: 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
cc80: 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
cc90: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
cca0: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
ccb0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
ccc0: 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
ccd0: 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
cce0: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
ccf0: 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
cd00: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
cd10: 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
cd20: 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
cd30: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
cd40: 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
cd50: 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
cd60: 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
cd70: 6c 65 20 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  le .** implement
cd80: 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
cd90: 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
cda0: 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
cdb0: 65 74 77 65 65 6e 20 0a 2a 2a 20 64 61 74 61 62  etween .** datab
cdc0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c  ase connections,
cdd0: 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72   even when the r
cde0: 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65  est of the in-me
cdf0: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20 0a 2a  mory database .*
ce00: 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
ce10: 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
ce20: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
ce30: 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
ce40: 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
ce50: 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
ce60: 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
ce70: 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
ce80: 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
ce90: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
cea0: 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
ceb0: 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
cec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
ced0: 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
cee0: 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
cef0: 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
cf00: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
cf10: 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 20  ess real tables 
cf20: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
cf30: 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
cf40: 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
cf50: 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
cf60: 65 72 73 20 0a 2a 2a 20 74 72 61 6e 73 61 63 74  ers .** transact
cf70: 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
cf80: 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
cf90: 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
cfa0: 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 63 6f   database .** co
cfb0: 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74  nnection as that
cfc0: 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65   used to execute
cfd0: 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20   SQL operations 
cfe0: 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  on the virtual t
cff0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  able..**.** All 
d000: 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74  VTable objects t
d010: 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74  hat correspond t
d020: 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65  o a single table
d030: 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20   in a shared.** 
d040: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
d050: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74  are initially st
d060: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
d070: 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f  -list pointed to
d080: 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65   by.** the Table
d090: 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20  .pVTable member 
d0a0: 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20  variable of the 
d0b0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61  corresponding Ta
d0c0: 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57  ble object..** W
d0d0: 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70  hen an sqlite3_p
d0e0: 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69  repare() operati
d0f0: 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74  on is required t
d100: 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
d110: 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69  tual.** table, i
d120: 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c  t searches the l
d130: 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62  ist for the VTab
d140: 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  le that correspo
d150: 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61  nds to the.** da
d160: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
d170: 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70  n doing the prep
d180: 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75  aring so as to u
d190: 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a  se the correct.*
d1a0: 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  * sqlite3_vtab* 
d1b0: 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f  handle in the co
d1c0: 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a  mpiled query..**
d1d0: 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d  .** When an in-m
d1e0: 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65  emory Table obje
d1f0: 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66  ct is deleted (f
d200: 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20  or example when 
d210: 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  the.** schema is
d220: 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20   being reloaded 
d230: 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29  for some reason)
d240: 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a  , the VTable obj
d250: 65 63 74 73 20 61 72 65 20 6e 6f 74 20 0a 2a 2a  ects are not .**
d260: 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
d270: 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
d280: 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
d290: 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 20 0a  Disconnect()ed .
d2a0: 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
d2b0: 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
d2c0: 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
d2d0: 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
d2e0: 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
d2f0: 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
d300: 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
d310: 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
d320: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
d330: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
d340: 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
d350: 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
d360: 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
d370: 65 63 74 65 64 20 0a 2a 2a 20 6e 65 78 74 20 74  ected .** next t
d380: 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
d390: 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
d3a0: 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
d3b0: 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
d3c0: 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
d3d0: 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
d3e0: 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
d3f0: 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
d400: 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
d410: 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
d420: 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
d430: 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
d440: 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
d450: 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
d460: 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
d470: 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
d480: 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
d490: 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
d4a0: 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
d4b0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
d4c0: 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
d4d0: 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
d4e0: 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
d4f0: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
d500: 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
d510: 64 20 62 79 20 0a 2a 2a 20 73 71 6c 69 74 65 33  d by .** sqlite3
d520: 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
d530: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
d540: 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
d550: 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 20 0a  n VTable.db as .
d560: 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
d570: 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
d580: 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
d590: 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
d5a0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
d5b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
d5c0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
d5d0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
d5e0: 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
d5f0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
d600: 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
d610: 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
d620: 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
d630: 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
d640: 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
d650: 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
d660: 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
d670: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
d680: 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
d690: 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
d6a0: 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
d6b0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
d6c0: 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
d6d0: 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
d6e0: 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
d6f0: 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
d700: 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
d710: 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
d720: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
d730: 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
d740: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
d750: 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
d760: 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  ) */.};../*.** E
d770: 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 69 73  ach SQL table is
d780: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
d790: 6d 65 6d 6f 72 79 20 62 79 20 61 6e 20 69 6e 73  memory by an ins
d7a0: 74 61 6e 63 65 20 6f 66 20 74 68 65 0a 2a 2a 20  tance of the.** 
d7b0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
d7c0: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65  ure..**.** Table
d7d0: 2e 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 6e 61  .zName is the na
d7e0: 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 2e  me of the table.
d7f0: 20 20 54 68 65 20 63 61 73 65 20 6f 66 20 74 68    The case of th
d800: 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a 20 43 52  e original.** CR
d810: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
d820: 6d 65 6e 74 20 69 73 20 73 74 6f 72 65 64 2c 20  ment is stored, 
d830: 62 75 74 20 63 61 73 65 20 69 73 20 6e 6f 74 20  but case is not 
d840: 73 69 67 6e 69 66 69 63 61 6e 74 20 66 6f 72 0a  significant for.
d850: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 73 2e 0a  ** comparisons..
d860: 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 6e 43 6f 6c  **.** Table.nCol
d870: 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
d880: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
d890: 73 20 74 61 62 6c 65 2e 20 20 54 61 62 6c 65 2e  s table.  Table.
d8a0: 61 43 6f 6c 20 69 73 20 61 0a 2a 2a 20 70 6f 69  aCol is a.** poi
d8b0: 6e 74 65 72 20 74 6f 20 61 6e 20 61 72 72 61 79  nter to an array
d8c0: 20 6f 66 20 43 6f 6c 75 6d 6e 20 73 74 72 75 63   of Column struc
d8d0: 74 75 72 65 73 2c 20 6f 6e 65 20 66 6f 72 20 65  tures, one for e
d8e0: 61 63 68 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a  ach column..**.*
d8f0: 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 68  * If the table h
d900: 61 73 20 61 6e 20 49 4e 54 45 47 45 52 20 50 52  as an INTEGER PR
d910: 49 4d 41 52 59 20 4b 45 59 2c 20 74 68 65 6e 20  IMARY KEY, then 
d920: 54 61 62 6c 65 2e 69 50 4b 65 79 20 69 73 20 74  Table.iPKey is t
d930: 68 65 20 69 6e 64 65 78 20 6f 66 0a 2a 2a 20 74  he index of.** t
d940: 68 65 20 63 6f 6c 75 6d 6e 20 74 68 61 74 20 69  he column that i
d950: 73 20 74 68 61 74 20 6b 65 79 2e 20 20 20 4f 74  s that key.   Ot
d960: 68 65 72 77 69 73 65 20 54 61 62 6c 65 2e 69 50  herwise Table.iP
d970: 4b 65 79 20 69 73 20 6e 65 67 61 74 69 76 65 2e  Key is negative.
d980: 20 20 4e 6f 74 65 0a 2a 2a 20 74 68 61 74 20 74    Note.** that t
d990: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
d9a0: 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6d  he PRIMARY KEY m
d9b0: 75 73 74 20 62 65 20 49 4e 54 45 47 45 52 20 66  ust be INTEGER f
d9c0: 6f 72 20 74 68 69 73 20 66 69 65 6c 64 20 74 6f  or this field to
d9d0: 0a 2a 2a 20 62 65 20 73 65 74 2e 20 20 41 6e 20  .** be set.  An 
d9e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
d9f0: 4b 45 59 20 69 73 20 75 73 65 64 20 61 73 20 74  KEY is used as t
da00: 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61 63  he rowid for eac
da10: 68 20 72 6f 77 20 6f 66 0a 2a 2a 20 74 68 65 20  h row of.** the 
da20: 74 61 62 6c 65 2e 20 20 49 66 20 61 20 74 61 62  table.  If a tab
da30: 6c 65 20 68 61 73 20 6e 6f 20 49 4e 54 45 47 45  le has no INTEGE
da40: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 74  R PRIMARY KEY, t
da50: 68 65 6e 20 61 20 72 61 6e 64 6f 6d 20 72 6f 77  hen a random row
da60: 69 64 0a 2a 2a 20 69 73 20 67 65 6e 65 72 61 74  id.** is generat
da70: 65 64 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ed for each row 
da80: 6f 66 20 74 68 65 20 74 61 62 6c 65 2e 20 20 54  of the table.  T
da90: 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20  F_HasPrimaryKey 
daa0: 69 73 20 73 65 74 20 69 66 0a 2a 2a 20 74 68 65  is set if.** the
dab0: 20 74 61 62 6c 65 20 68 61 73 20 61 6e 79 20 50   table has any P
dac0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 49 4e 54 45  RIMARY KEY, INTE
dad0: 47 45 52 20 6f 72 20 6f 74 68 65 72 77 69 73 65  GER or otherwise
dae0: 2e 0a 2a 2a 0a 2a 2a 20 54 61 62 6c 65 2e 74 6e  ..**.** Table.tn
daf0: 75 6d 20 69 73 20 74 68 65 20 70 61 67 65 20 6e  um is the page n
db00: 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 72 6f  umber for the ro
db10: 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 6f 66  ot BTree page of
db20: 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 74 68   the table in th
db30: 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69  e.** database fi
db40: 6c 65 2e 20 20 49 66 20 54 61 62 6c 65 2e 69 44  le.  If Table.iD
db50: 62 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  b is the index o
db60: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
db70: 61 62 6c 65 20 62 61 63 6b 65 6e 64 0a 2a 2a 20  able backend.** 
db80: 69 6e 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 2e  in sqlite.aDb[].
db90: 20 20 30 20 69 73 20 66 6f 72 20 74 68 65 20 6d    0 is for the m
dba0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 61 6e 64  ain database and
dbb0: 20 31 20 69 73 20 66 6f 72 20 74 68 65 20 66 69   1 is for the fi
dbc0: 6c 65 20 74 68 61 74 0a 2a 2a 20 68 6f 6c 64 73  le that.** holds
dbd0: 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
dbe0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 20 20  s and indices.  
dbf0: 49 66 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20  If TF_Ephemeral 
dc00: 69 73 20 73 65 74 0a 2a 2a 20 74 68 65 6e 20 74  is set.** then t
dc10: 68 65 20 74 61 62 6c 65 20 69 73 20 73 74 6f 72  he table is stor
dc20: 65 64 20 69 6e 20 61 20 66 69 6c 65 20 74 68 61  ed in a file tha
dc30: 74 20 69 73 20 61 75 74 6f 6d 61 74 69 63 61 6c  t is automatical
dc40: 6c 79 20 64 65 6c 65 74 65 64 0a 2a 2a 20 77 68  ly deleted.** wh
dc50: 65 6e 20 74 68 65 20 56 44 42 45 20 63 75 72 73  en the VDBE curs
dc60: 6f 72 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  or to the table 
dc70: 69 73 20 63 6c 6f 73 65 64 2e 20 20 49 6e 20 74  is closed.  In t
dc80: 68 69 73 20 63 61 73 65 20 54 61 62 6c 65 2e 74  his case Table.t
dc90: 6e 75 6d 20 0a 2a 2a 20 72 65 66 65 72 73 20 56  num .** refers V
dca0: 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
dcb0: 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
dcc0: 20 74 61 62 6c 65 20 6f 70 65 6e 2c 20 6e 6f 74   table open, not
dcd0: 20 74 6f 20 74 68 65 20 72 6f 6f 74 0a 2a 2a 20   to the root.** 
dce0: 70 61 67 65 20 6e 75 6d 62 65 72 2e 20 20 54 72  page number.  Tr
dcf0: 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 73 20 61  ansient tables a
dd00: 72 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  re used to hold 
dd10: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  the results of a
dd20: 0a 2a 2a 20 73 75 62 2d 71 75 65 72 79 20 74 68  .** sub-query th
dd30: 61 74 20 61 70 70 65 61 72 73 20 69 6e 73 74 65  at appears inste
dd40: 61 64 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ad of a real tab
dd50: 6c 65 20 6e 61 6d 65 20 69 6e 20 74 68 65 20 46  le name in the F
dd60: 52 4f 4d 20 63 6c 61 75 73 65 20 0a 2a 2a 20 6f  ROM clause .** o
dd70: 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
dd80: 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
dd90: 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
dda0: 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
ddb0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
ddc0: 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
ddd0: 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
dde0: 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
ddf0: 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
de00: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
de10: 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
de20: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
de30: 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
de40: 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
de50: 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
de60: 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
de70: 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
de80: 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
de90: 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
dea0: 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
deb0: 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
dec0: 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
ded0: 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
dee0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
def0: 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
df00: 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
df10: 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
df20: 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 69 66  ch column */.#if
df30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
df40: 5f 43 48 45 43 4b 0a 20 20 45 78 70 72 4c 69 73  _CHECK.  ExprLis
df50: 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a  t *pCheck;    /*
df60: 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74   All CHECK const
df70: 72 61 69 6e 74 73 20 2a 2f 0a 23 65 6e 64 69 66  raints */.#endif
df80: 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45  .  tRowcnt nRowE
df90: 73 74 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d  st;     /* Estim
dfa0: 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
dfb0: 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
dfc0: 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
dfd0: 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
dfe0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42         /* Root B
dff0: 54 72 65 65 20 6e 6f 64 65 20 66 6f 72 20 74 68  Tree node for th
e000: 69 73 20 74 61 62 6c 65 20 28 73 65 65 20 6e 6f  is table (see no
e010: 74 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  te above) */.  i
e020: 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
e030: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
e040: 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
e050: 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 70  [iPKey] as the p
e060: 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 20 20  rimary key */.  
e070: 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
e080: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e090: 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
e0a0: 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 31 36  s table */.  u16
e0b0: 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
e0c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
e0d0: 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
e0e0: 54 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  Table */.  LogEs
e0f0: 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
e100: 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
e110: 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
e120: 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
e130: 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
e140: 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
e150: 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
e160: 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
e170: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
e180: 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
e190: 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
e1a0: 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
e1b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e1c0: 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
e1d0: 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
e1e0: 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
e1f0: 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
e200: 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
e210: 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
e220: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
e230: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
e240: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
e250: 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
e260: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
e270: 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
e280: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
e290: 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 54 65  oduleArg;  /* Te
e2a0: 78 74 20 6f 66 20 61 6c 6c 20 6d 6f 64 75 6c 65  xt of all module
e2b0: 20 61 72 67 73 2e 20 5b 30 5d 20 69 73 20 6d 6f   args. [0] is mo
e2c0: 64 75 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 56  dule name */.  V
e2d0: 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
e2e0: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
e2f0: 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
e300: 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
e310: 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
e320: 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
e330: 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
e340: 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
e350: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
e360: 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
e370: 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
e380: 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
e390: 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
e3a0: 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
e3b0: 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
e3c0: 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
e3d0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
e3e0: 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
e3f0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  ..*/.#define TF_
e400: 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20  Readonly        
e410: 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0x01    /* Read-
e420: 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
e430: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
e440: 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
e450: 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70  0x02    /* An ep
e460: 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f  hemeral table */
e470: 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50  .#define TF_HasP
e480: 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34  rimaryKey   0x04
e490: 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
e4a0: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
e4b0: 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
e4c0: 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
e4d0: 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20  8    /* Integer 
e4e0: 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61  primary key is a
e4f0: 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a  utoincrement */.
e500: 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75  #define TF_Virtu
e510: 61 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20  al         0x10 
e520: 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75     /* Is a virtu
e530: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
e540: 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  ine TF_WithoutRo
e550: 77 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f  wid    0x20    /
e560: 2a 20 4e 6f 20 72 6f 77 69 64 20 75 73 65 64 2e  * No rowid used.
e570: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
e580: 74 68 65 20 6b 65 79 20 2a 2f 0a 0a 0a 2f 2a 0a  the key */.../*.
e590: 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77  ** Test to see w
e5a0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20  hether or not a 
e5b0: 74 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75  table is a virtu
e5c0: 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  al table.  This 
e5d0: 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20  is.** done as a 
e5e0: 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74  macro so that it
e5f0: 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a   will be optimiz
e600: 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74  ed out when virt
e610: 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70  ual.** table sup
e620: 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20  port is omitted 
e630: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
e640: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
e650: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
e660: 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73  BLE.#  define Is
e670: 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
e680: 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
e690: 26 20 54 46 5f 56 69 72 74 75 61 6c 29 21 3d 30  & TF_Virtual)!=0
e6a0: 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
e6b0: 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
e6c0: 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
e6d0: 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
e6e0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  =0).#else.#  def
e6f0: 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
e700: 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
e710: 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
e720: 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (X) 0.#endif../*
e730: 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20   Does the table 
e740: 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a  have a rowid */.
e750: 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64  #define HasRowid
e760: 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74  (X)     (((X)->t
e770: 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74  abFlags & TF_Wit
e780: 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 0a  houtRowid)==0)..
e790: 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
e7a0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e7b0: 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
e7c0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e7d0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
e7e0: 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
e7f0: 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
e800: 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
e810: 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
e820: 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
e830: 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
e840: 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
e850: 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
e860: 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
e870: 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
e880: 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
e890: 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
e8a0: 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
e8b0: 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
e8c0: 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
e8d0: 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
e8e0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
e8f0: 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
e900: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
e910: 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
e920: 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
e930: 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
e940: 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
e950: 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
e960: 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
e970: 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
e980: 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
e990: 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
e9a0: 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61  ** Equivalent na
e9b0: 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  mes:.**.**     f
e9c0: 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69  rom-table == chi
e9d0: 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  ld-table.**     
e9e0: 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61    to-table == pa
e9f0: 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a  rent-table.**.**
ea00: 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
ea10: 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
ea20: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
ea30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
ea40: 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
ea50: 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
ea60: 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
ea70: 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
ea80: 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
ea90: 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
eaa0: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
eab0: 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
eac0: 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
ead0: 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
eae0: 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f  **.** The list o
eaf0: 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f  f all parents fo
eb00: 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20  r child Table X 
eb10: 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b  is held at X.pFK
eb20: 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74  ey..**.** A list
eb30: 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e   of all children
eb40: 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d   for a table nam
eb50: 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68  ed Z (which migh
eb60: 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74  t not even exist
eb70: 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20  ).** is held in 
eb80: 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20  Schema.fkeyHash 
eb90: 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20  with a hash key 
eba0: 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  of Z..*/.struct 
ebb0: 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
ebc0: 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
ebd0: 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
ebe0: 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
ebf0: 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
ec00: 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
ec10: 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
ec20: 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73   FKey with the s
ec30: 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65  ame in pFrom. Ne
ec40: 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72  xt parent of pFr
ec50: 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
ec60: 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
ec70: 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
ec80: 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
ec90: 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
eca0: 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
ecb0: 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  To;    /* Next w
ecc0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
ecd0: 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20  . Next child of 
ece0: 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  zTo. */.  FKey *
ecf0: 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50  pPrevTo;    /* P
ed00: 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65  revious with the
ed10: 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69   same zTo */.  i
ed20: 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
ed30: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
ed40: 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
ed50: 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
ed60: 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
ed70: 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
ed80: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
ed90: 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
eda0: 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
edb0: 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
edc0: 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
edd0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
ede0: 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
edf0: 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
ee00: 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
ee10: 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
ee20: 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20  [2];/* Triggers 
ee30: 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63  for aAction[] ac
ee40: 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
ee50: 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20  t sColMap {     
ee60: 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
ee70: 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
ee80: 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
ee90: 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
eea0: 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  om;            /
eeb0: 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
eec0: 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
eed0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
eee0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
eef0: 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
ef00: 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50  .  If NULL use P
ef10: 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
ef20: 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
ef30: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
ef40: 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
ef50: 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d  Col columns */.}
ef60: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20  ;../*.** SQLite 
ef70: 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69  supports many di
ef80: 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20  fferent ways to 
ef90: 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72  resolve a constr
efa0: 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20  aint.** error.  
efb0: 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
efc0: 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ing means that a
efd0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
efe0: 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20  ation.** causes 
eff0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
f000: 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c   process to fail
f010: 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72   and for the cur
f020: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
f030: 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  .** to be rolled
f040: 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72   back.  ABORT pr
f050: 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
f060: 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
f070: 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73  process.** fails
f080: 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63   and any prior c
f090: 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74  hanges from that
f0a0: 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   one operation a
f0b0: 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a  re backed out,.*
f0c0: 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61  * but the transa
f0d0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c  ction is not rol
f0e0: 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20  led back.  FAIL 
f0f0: 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
f100: 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65   that.** the ope
f110: 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  ration in progre
f120: 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74  ss stops and ret
f130: 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f  urns an error co
f140: 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a  de.  But prior.*
f150: 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f  * changes due to
f160: 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
f170: 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  ion are not back
f180: 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f  ed out and no ro
f190: 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73  llback.** occurs
f1a0: 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20  .  IGNORE means 
f1b0: 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75  that the particu
f1c0: 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75  lar row that cau
f1d0: 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  sed the constrai
f1e0: 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e  nt.** error is n
f1f0: 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  ot inserted or u
f200: 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73  pdated.  Process
f210: 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
f220: 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73  d no error.** is
f230: 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c   returned.  REPL
f240: 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70  ACE means that p
f250: 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
f260: 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61  ase rows that ca
f270: 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45  used.** a UNIQUE
f280: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
f290: 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65  ation are remove
f2a0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  d so that the ne
f2b0: 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75  w insert or.** u
f2c0: 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65  pdate can procee
f2d0: 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
f2e0: 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
f2f0: 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
f300: 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43  d..**.** RESTRIC
f310: 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20  T, SETNULL, and 
f320: 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20  CASCADE actions 
f330: 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f  apply only to fo
f340: 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52  reign keys..** R
f350: 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73  ESTRICT is the s
f360: 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72  ame as ABORT for
f370: 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69   IMMEDIATE forei
f380: 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a  gn keys and the.
f390: 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42  ** same as ROLLB
f3a0: 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ACK for DEFERRED
f3b0: 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20   keys.  SETNULL 
f3c0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66  means that the f
f3d0: 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73  oreign.** key is
f3e0: 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43   set to NULL.  C
f3f0: 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61  ASCADE means tha
f400: 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50  t a DELETE or UP
f410: 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72  DATE of the.** r
f420: 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
f430: 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65  row is propagate
f440: 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74  d into the row t
f450: 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a  hat holds the.**
f460: 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a   foreign key..**
f470: 20 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69   .** The followi
f480: 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75  ng symbolic valu
f490: 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72  es are used to r
f4a0: 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65  ecord which type
f4b0: 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f  .** of action to
f4c0: 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e   take..*/.#defin
f4d0: 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20  e OE_None     0 
f4e0: 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f    /* There is no
f4f0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63   constraint to c
f500: 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  heck */.#define 
f510: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20  OE_Rollback 1   
f520: 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72  /* Fail the oper
f530: 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61  ation and rollba
f540: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
f550: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
f560: 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a  _Abort    2   /*
f570: 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65   Back out change
f580: 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c  s but do no roll
f590: 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e  back transaction
f5a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46   */.#define OE_F
f5b0: 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53  ail     3   /* S
f5c0: 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f  top the operatio
f5d0: 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20  n but leave all 
f5e0: 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f  prior changes */
f5f0: 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f  .#define OE_Igno
f600: 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f  re   4   /* Igno
f610: 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f  re the error. Do
f620: 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45   not do the INSE
f630: 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
f640: 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61  #define OE_Repla
f650: 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74  ce  5   /* Delet
f660: 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72  e existing recor
f670: 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52  d, then do INSER
f680: 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a  T or UPDATE */..
f690: 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72  #define OE_Restr
f6a0: 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62  ict 6   /* OE_Ab
f6b0: 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ort for IMMEDIAT
f6c0: 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66  E, OE_Rollback f
f6d0: 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23  or DEFERRED */.#
f6e0: 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c  define OE_SetNul
f6f0: 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68  l  7   /* Set th
f700: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
f710: 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23  lue to NULL */.#
f720: 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c  define OE_SetDfl
f730: 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68  t  8   /* Set th
f740: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61  e foreign key va
f750: 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75  lue to its defau
f760: 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  lt */.#define OE
f770: 5f 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a  _Cascade  9   /*
f780: 20 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61   Cascade the cha
f790: 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  nges */..#define
f7a0: 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20   OE_Default  10 
f7b0: 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20   /* Do whatever 
f7c0: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
f7d0: 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  on is */.../*.**
f7e0: 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
f7f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
f800: 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65  ructure is passe
f810: 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a  d as the first.*
f820: 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71  * argument to sq
f830: 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70  lite3VdbeKeyComp
f840: 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20  are and is used 
f850: 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20 0a  to control the .
f860: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
f870: 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
f880: 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
f890: 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
f8a0: 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
f8b0: 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
f8c0: 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
f8d0: 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
f8e0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
f8f0: 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
f900: 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
f910: 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
f920: 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
f930: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
f940: 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
f950: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
f960: 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
f970: 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
f980: 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f9a0: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
f9b0: 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
f9c0: 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
f9d0: 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20  .  u16 nField;  
f9e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
f9f0: 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
fa00: 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
fa10: 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20    u16 nXField;  
fa20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fa30: 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e  of columns beyon
fa40: 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e  d the key column
fa50: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
fa60: 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
fa70: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
fa80: 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
fa90: 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
faa0: 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
fab0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
fac0: 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
fad0: 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
fae0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
faf0: 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
fb00: 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
fb10: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
fb20: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
fb30: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
fb40: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
fb50: 74 20 61 0a 2a 2a 20 73 69 6e 67 6c 65 20 69 6e  t a.** single in
fb60: 64 65 78 20 72 65 63 6f 72 64 20 74 68 61 74 20  dex record that 
fb70: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
fb80: 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
fb90: 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 76   individual.** v
fba0: 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  alues..**.** A r
fbb0: 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
fbc0: 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
fbd0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
fbe0: 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
fbf0: 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
fc00: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
fc10: 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
fc20: 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
fc30: 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
fc40: 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
fc50: 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
fc60: 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
fc70: 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
fc80: 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
fc90: 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
fca0: 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
fcb0: 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
fcc0: 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
fcd0: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
fce0: 65 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64  e holds a record
fcf0: 20 74 68 61 74 20 68 61 73 20 61 6c 72 65 61 64   that has alread
fd00: 79 20 62 65 65 6e 20 64 69 73 61 73 73 65 6d 62  y been disassemb
fd10: 6c 65 64 0a 2a 2a 20 69 6e 74 6f 20 69 74 73 20  led.** into its 
fd20: 63 6f 6e 73 74 69 74 75 65 6e 74 20 66 69 65 6c  constituent fiel
fd30: 64 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ds..*/.struct Un
fd40: 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
fd50: 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
fd60: 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
fd70: 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
fd80: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
fd90: 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
fda0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
fdb0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
fdc0: 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 75 38 20 66 6c  Mem[] */.  u8 fl
fdd0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ags;           /
fde0: 2a 20 42 6f 6f 6c 65 61 6e 20 73 65 74 74 69 6e  * Boolean settin
fdf0: 67 73 2e 20 20 55 4e 50 41 43 4b 45 44 5f 2e 2e  gs.  UNPACKED_..
fe00: 2e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 4d 65 6d  . below */.  Mem
fe10: 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
fe20: 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 7d 3b   /* Values */.};
fe30: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
fe40: 76 61 6c 75 65 73 20 6f 66 20 55 6e 70 61 63 6b  values of Unpack
fe50: 65 64 52 65 63 6f 72 64 2e 66 6c 61 67 73 0a 2a  edRecord.flags.*
fe60: 2f 0a 23 64 65 66 69 6e 65 20 55 4e 50 41 43 4b  /.#define UNPACK
fe70: 45 44 5f 49 4e 43 52 4b 45 59 20 20 20 20 20 20  ED_INCRKEY      
fe80: 20 30 78 30 31 20 20 2f 2a 20 4d 61 6b 65 20 74   0x01  /* Make t
fe90: 68 69 73 20 6b 65 79 20 61 6e 20 65 70 73 69 6c  his key an epsil
fea0: 6f 6e 20 6c 61 72 67 65 72 20 2a 2f 0a 23 64 65  on larger */.#de
feb0: 66 69 6e 65 20 55 4e 50 41 43 4b 45 44 5f 50 52  fine UNPACKED_PR
fec0: 45 46 49 58 5f 4d 41 54 43 48 20 20 30 78 30 32  EFIX_MATCH  0x02
fed0: 20 20 2f 2a 20 41 20 70 72 65 66 69 78 20 6d 61    /* A prefix ma
fee0: 74 63 68 20 69 73 20 63 6f 6e 73 69 64 65 72 65  tch is considere
fef0: 64 20 4f 4b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  d OK */../*.** E
ff00: 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
ff10: 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
ff20: 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
ff30: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
ff40: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
ff50: 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
ff60: 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
ff70: 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
ff80: 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
ff90: 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
ffa0: 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
ffb0: 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
ffc0: 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
ffd0: 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
ffe0: 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
fff0: 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
10000 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
10010 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
10020 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
10030 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
10040 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
10050 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
10060 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
10070 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
10080 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
10090 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
100a0 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
100b0 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
100c0 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
100d0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
100e0 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
100f0 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
10100 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
10110 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
10120 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
10130 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
10140 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
10150 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
10160 62 65 63 61 75 73 65 20 74 68 65 20 0a 2a 2a 20  because the .** 
10170 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20  first column to 
10180 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20  be indexed (c3) 
10190 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
101a0 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e  2 in Ex1.aCol[].
101b0 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63  .** The second c
101c0 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
101d0 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20  xed (c1) has an 
101e0 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a  index of 0 in.**
101f0 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e   Ex1.aCol[], hen
10200 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b  ce Ex2.aiColumn[
10210 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  1]==0..**.** The
10220 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66   Index.onError f
10230 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20  ield determines 
10240 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
10250 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d  he indexed colum
10260 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e  ns.** must be un
10270 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f  ique and what to
10280 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20   do if they are 
10290 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78  not.  When Index
102a0 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65  .onError=OE_None
102b0 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68  ,.** it means th
102c0 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71  is is not a uniq
102d0 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72  ue index.  Other
102e0 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69  wise it is a uni
102f0 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64  que index.** and
10300 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e   the value of In
10310 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69  dex.onError indi
10320 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63  cate the which c
10330 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
10340 6f 6e 20 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  on .** algorithm
10350 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
10360 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
10370 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
10380 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
10390 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72   element..*/.str
103a0 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
103b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
103c0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
103d0 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
103e0 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
103f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
10400 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
10410 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
10420 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
10430 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
10440 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  wEst;       /* F
10450 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
10460 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
10470 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
10480 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
10490 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
104a0 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
104b0 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
104c0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
104d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
104e0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
104f0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
10500 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
10510 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
10520 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
10530 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
10540 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
10550 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
10560 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
10570 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
10580 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
10590 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
105a0 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
105b0 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
105c0 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
105d0 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
105e0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  /.  char **azCol
105f0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
10600 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
10610 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
10620 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
10630 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
10640 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
10650 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
10660 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
10670 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
10680 49 6e 66 6f 3b 20 20 20 20 20 20 20 2f 2a 20 41  Info;       /* A
10690 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
106a0 73 75 69 74 61 62 6c 65 20 66 6f 72 20 74 68 69  suitable for thi
106b0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  s index */.  int
106c0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
106d0 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
106e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
106f0 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
10700 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
10710 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
10720 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
10730 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
10740 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
10750 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
10760 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
10770 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
10780 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
10790 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
107a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
107b0 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
107c0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
107d0 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
107e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
107f0 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
10800 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
10810 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
10820 75 6e 73 69 67 6e 65 64 20 61 75 74 6f 49 6e 64  unsigned autoInd
10830 65 78 3a 32 3b 20 20 20 20 2f 2a 20 31 3d 3d 55  ex:2;    /* 1==U
10840 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
10850 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
10860 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
10870 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
10880 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
10890 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
108a0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
108b0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
108c0 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
108d0 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
108e0 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
108f0 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
10900 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
10910 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
10920 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
10930 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
10940 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
10950 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
10960 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
10970 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
10980 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
10990 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
109a0 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
109b0 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
109c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
109d0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
109e0 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
109f0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
10a00 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
10a10 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
10a20 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
10a30 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
10a40 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
10a50 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
10a60 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
10a70 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
10a80 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
10a90 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
10aa0 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
10ab0 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
10ac0 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  y */.#endif.};..
10ad0 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
10ae0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
10af0 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
10b00 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
10b10 64 20 69 6e 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  d in memory .** 
10b20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72  using a structur
10b30 65 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20  e of this type. 
10b40 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
10b50 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66  on at the top of
10b60 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e   the.** analyze.
10b70 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f  c source file fo
10b80 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
10b90 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
10ba0 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
10bb0 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20  {.  void *p;    
10bc0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
10bd0 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f   to sampled reco
10be0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20  rd */.  int n;  
10bf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
10c00 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62  e of record in b
10c10 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ytes */.  tRowcn
10c20 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45  t *anEq;    /* E
10c30 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  st. number of ro
10c40 77 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79  ws where the key
10c50 20 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d   equals this sam
10c60 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
10c70 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73   *anLt;    /* Es
10c80 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
10c90 73 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c  s where key is l
10ca0 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
10cb0 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  mple */.  tRowcn
10cc0 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45  t *anDLt;   /* E
10cd0 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  st. number of di
10ce0 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73  stinct keys less
10cf0 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
10d00 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45  e */.};../*.** E
10d10 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67  ach token coming
10d20 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65   out of the lexe
10d30 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  r is an instance
10d40 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75   of.** this stru
10d50 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61  cture.  Tokens a
10d60 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  re also used as 
10d70 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65  part of an expre
10d80 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  ssion..**.** Not
10d90 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20  e if Token.z==0 
10da0 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61  then Token.dyn a
10db0 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75  nd Token.n are u
10dc0 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20  ndefined and.** 
10dd0 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64  may contain rand
10de0 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e  om values.  Do n
10df0 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75  ot make any assu
10e00 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f  mptions about To
10e10 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54  ken.dyn.** and T
10e20 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65  oken.n when Toke
10e30 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63  n.z==0..*/.struc
10e40 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73  t Token {.  cons
10e50 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f  t char *z;     /
10e60 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f  * Text of the to
10e70 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74  ken.  Not NULL-t
10e80 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20  erminated! */.  
10e90 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20  unsigned int n; 
10ea0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
10eb0 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68  characters in th
10ec0 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a  is token */.};..
10ed0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
10ee0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
10ef0 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
10f00 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
10f10 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
10f20 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54  ode for a SELECT
10f30 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
10f40 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
10f50 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70  ns..**.** If Exp
10f60 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c  r.op==TK_AGG_COL
10f70 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55  UMN or TK_AGG_FU
10f80 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72  NCTION then Expr
10f90 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a  .pAggInfo is a.*
10fa0 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  * pointer to thi
10fb0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  s structure.  Th
10fc0 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66  e Expr.iColumn f
10fd0 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65  ield is the inde
10fe0 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  x in.** AggInfo.
10ff0 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66  aCol[] or AggInf
11000 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66  o.aFunc[] of inf
11010 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20  ormation needed 
11020 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63  to generate.** c
11030 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64  ode for that nod
11040 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f  e..**.** AggInfo
11050 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67  .pGroupBy and Ag
11060 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70  gInfo.aFunc.pExp
11070 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64  r point to field
11080 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20  s within the.** 
11090 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20  original Select 
110a0 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
110b0 65 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c  escribes the SEL
110c0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ECT statement.  
110d0 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20  These.** fields 
110e0 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62  do not need to b
110f0 65 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61  e freed when dea
11100 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67  llocating the Ag
11110 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e  gInfo structure.
11120 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e  .*/.struct AggIn
11130 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74  fo {.  u8 direct
11140 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Mode;          /
11150 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69  * Direct renderi
11160 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61  ng mode means ta
11170 6b 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79  ke data directly
11180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11190 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72             ** fr
111a0 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  om source tables
111b0 20 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f   rather than fro
111c0 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a  m accumulators *
111d0 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e  /.  u8 useSortin
111e0 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49  gIdx;       /* I
111f0 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72  n direct mode, r
11200 65 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72  eference the sor
11210 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65  ting index rathe
11220 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
11230 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
11240 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  han the source t
11250 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  able */.  int so
11260 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20  rtingIdx;       
11270 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
11280 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e  er of the sortin
11290 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
112a0 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b   sortingIdxPTab;
112b0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
112c0 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d  umber of pseudo-
112d0 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  table */.  int n
112e0 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20  SortingColumn;  
112f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11300 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73  columns in the s
11310 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
11320 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52    int mnReg, mxR
11330 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e  eg;       /* Ran
11340 67 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  ge of registers 
11350 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43  allocated for aC
11360 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a  ol and aFunc */.
11370 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
11380 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65  upBy;     /* The
11390 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65   group by clause
113a0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
113b0 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a  Info_col {    /*
113c0 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   For each column
113d0 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20   used in source 
113e0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61  tables */.    Ta
113f0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
11400 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65         /* Source
11410 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
11420 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
11430 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
11440 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
11450 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
11460 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20     int iColumn; 
11470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
11480 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74  olumn number wit
11490 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74  hin the source t
114a0 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
114b0 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20  iSorterColumn;  
114c0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
114d0 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72  umber in the sor
114e0 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
114f0 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20    int iMem;     
11500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
11510 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
11520 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d  at acts as accum
11530 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78  ulator */.    Ex
11540 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
11550 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72         /* The or
11560 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f  iginal expressio
11570 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a  n */.  } *aCol;.
11580 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20    int nColumn;  
11590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
115a0 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72  ber of used entr
115b0 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f  ies in aCol[] */
115c0 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61  .  int nAccumula
115d0 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  tor;       /* Nu
115e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
115f0 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67  that show throug
11600 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e  h to the output.
11610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11620 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64             ** Ad
11630 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73  ditional columns
11640 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61   are used only a
11650 73 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  s parameters to.
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67            ** agg
11680 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
11690 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67   */.  struct Agg
116a0 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a  Info_func {   /*
116b0 20 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67   For each aggreg
116c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ate function */.
116d0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
116f0 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64  Expression encod
11700 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ing the function
11710 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20   */.    FuncDef 
11720 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20  *pFunc;         
11730 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74   /* The aggregat
11740 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65  e function imple
11750 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20  mentation */.   
11760 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
11770 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
11780 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
11790 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
117a0 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74  lator */.    int
117b0 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20   iDistinct;     
117c0 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72        /* Ephemer
117d0 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f  al table used to
117e0 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43   enforce DISTINC
117f0 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b  T */.  } *aFunc;
11800 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20  .  int nFunc;   
11810 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11820 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
11830 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b  in aFunc[] */.};
11840 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61  ../*.** The data
11850 74 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20  type ynVar is a 
11860 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20  signed integer, 
11870 65 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72  either 16-bit or
11880 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61   32-bit..** Usua
11890 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74  lly it is 16-bit
118a0 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54  s.  But if SQLIT
118b0 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
118c0 55 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72  UMBER is greater
118d0 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77  .** than 32767 w
118e0 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69  e have to make i
118f0 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69  t 32-bit.  16-bi
11900 74 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62  t is preferred b
11910 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65  ecause.** it use
11920 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e  s less memory in
11930 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74   the Expr object
11940 2c 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67  , which is a big
11950 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20   memory user.** 
11960 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20  in systems with 
11970 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64  lots of prepared
11980 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e   statements.  An
11990 64 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f  d few applicatio
119a0 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20  ns.** need more 
119b0 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72  than about 10 or
119c0 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20   20 variables.  
119d0 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65  But some extreme
119e0 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74   users want.** t
119f0 6f 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20  o have prepared 
11a00 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20  statements with 
11a10 6f 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61  over 32767 varia
11a20 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68  bles, and for th
11a30 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e  em.** the option
11a40 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61   is available (a
11a50 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e  t compile-time).
11a60 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
11a70 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
11a80 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65  ER<=32767.typede
11a90 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c  f i16 ynVar;.#el
11aa0 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79  se.typedef int y
11ab0 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  nVar;.#endif../*
11ac0 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66  .** Each node of
11ad0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69   an expression i
11ae0 6e 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  n the parse tree
11af0 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   is an instance.
11b00 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
11b10 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  ture..**.** Expr
11b20 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64  .op is the opcod
11b30 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70  e. The integer p
11b40 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65  arser token code
11b50 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20  s are reused.** 
11b60 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e  as opcodes here.
11b70 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68   For example, th
11b80 65 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73  e parser defines
11b90 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20   TK_GE to be an 
11ba0 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20  integer.** code 
11bb0 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65  representing the
11bc0 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20   ">=" operator. 
11bd0 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65  This same intege
11be0 72 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64  r code is reused
11bf0 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74  .** to represent
11c00 20 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61   the greater-tha
11c10 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70  n-or-equal-to op
11c20 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78  erator in the ex
11c30 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65  pression.** tree
11c40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
11c50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
11c60 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f  SQL literal (TK_
11c70 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41  INTEGER, TK_FLOA
11c80 54 2c 20 54 4b 5f 42 4c 4f 42 2c 20 0a 2a 2a 20  T, TK_BLOB, .** 
11c90 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74  or TK_STRING), t
11ca0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
11cb0 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78 74  ontains the text
11cc0 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65   of the SQL lite
11cd0 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65  ral. If.** the e
11ce0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76  xpression is a v
11cf0 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49  ariable (TK_VARI
11d00 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72  ABLE), then Expr
11d10 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
11d20 74 68 65 20 0a 2a 2a 20 76 61 72 69 61 62 6c 65  the .** variable
11d30 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
11d40 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
11d50 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
11d60 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
11d70 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
11d80 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
11d90 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
11da0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
11db0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
11dc0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
11dd0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
11de0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
11df0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
11e00 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
11e10 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
11e20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
11e30 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
11e40 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
11e50 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
11e60 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
11e70 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
11e80 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
11e90 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
11ea0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
11eb0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
11ec0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
11ed0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
11ee0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
11ef0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
11f00 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
11f10 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
11f20 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
11f30 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
11f40 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
11f50 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
11f60 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
11f70 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
11f80 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
11f90 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
11fa0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 0a 2a 2a  r.x.pList is .**
11fb0 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
11fc0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
11fd0 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
11fe0 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
11ff0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
12000 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
12010 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
12020 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
12030 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
12040 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
12050 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
12060 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
12070 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
12080 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
12090 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
120a0 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
120b0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
120c0 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
120d0 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
120e0 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
120f0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
12100 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
12110 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
12120 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
12130 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
12140 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
12150 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
12160 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
12170 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
12180 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
12190 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
121a0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
121b0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
121c0 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
121d0 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
121e0 20 6d 61 72 6b 20 0a 2a 2a 20 63 68 61 72 61 63   mark .** charac
121f0 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f  ter '?' in the o
12200 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65  riginal SQL) the
12210 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c  n the Expr.iTabl
12220 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65  e holds the inde
12230 78 20 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  x .** number for
12240 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
12250 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
12260 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
12270 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
12280 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
12290 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
122a0 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
122b0 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
122c0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
122d0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
122e0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
122f0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
12300 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
12310 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
12320 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
12330 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
12340 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
12350 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
12360 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
12370 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
12380 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
12390 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
123a0 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
123b0 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
123c0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
123d0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
123e0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
123f0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
12400 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
12410 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
12420 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
12430 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
12440 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
12450 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
12460 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
12470 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
12480 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
12490 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
124a0 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
124b0 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
124c0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
124d0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
124e0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
124f0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
12500 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
12510 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
12520 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
12530 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
12540 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
12550 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
12560 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
12570 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
12580 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
12590 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
125a0 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
125b0 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
125c0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
125d0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
125e0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
125f0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
12600 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
12610 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
12620 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
12630 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
12640 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
12650 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
12660 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
12670 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
12680 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
12690 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
126a0 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
126b0 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
126c0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
126d0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
126e0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
126f0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
12700 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
12710 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
12720 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
12730 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
12740 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
12750 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
12760 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
12770 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
12780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
12790 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
127a0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
127b0 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
127c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
127d0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
127e0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
127f0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
12800 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
12810 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
12820 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
12830 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
12840 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
12850 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
12860 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
12870 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
12880 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
12890 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
128a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
128b0 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
128c0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
128d0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
128e0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
128f0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
12900 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
12910 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
12920 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
12930 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
12940 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
12950 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
12960 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
12970 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
12980 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
12990 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
129a0 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 20 0a 20 20  malfunction. .  
129b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
129c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
129d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
129e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
129f0 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
12a00 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
12a10 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
12a20 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
12a30 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
12a40 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
12a50 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
12a60 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
12a70 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20      /* op = IN, 
12a80 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20  EXISTS, SELECT, 
12a90 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20  CASE, FUNCTION, 
12aa0 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53  BETWEEN */.    S
12ab0 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
12ac0 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c      /* EP_xIsSel
12ad0 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c  ect and op = IN,
12ae0 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20   EXISTS, SELECT 
12af0 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20  */.  } x;..  /* 
12b00 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
12b10 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  d flag is set in
12b20 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
12b30 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
12b40 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
12b50 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
12b60 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
12b70 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
12b80 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
12b90 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
12ba0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
12bb0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
12bc0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
12bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
12c00 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51  *******/..#if SQ
12c10 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
12c20 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69  PTH>0.  int nHei
12c30 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ght;           /
12c40 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20  * Height of the 
12c50 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74  tree headed by t
12c60 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64  his node */.#end
12c70 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  if.  int iTable;
12c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
12c90 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72  K_COLUMN: cursor
12ca0 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   number of table
12cb0 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a   holding column.
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52           ** TK_R
12ce0 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65  EGISTER: registe
12cf0 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20  r number.       
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a    ** TK_TRIGGER:
12d20 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20   1 -> new, 0 -> 
12d30 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  old.            
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12d50 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 30  EP_Unlikely:  10
12d60 30 30 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68  00 times likelih
12d70 6f 6f 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69  ood */.  ynVar i
12d80 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
12d90 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  /* TK_COLUMN: co
12da0 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20  lumn index.  -1 
12db0 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20  for rowid..     
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42      ** TK_VARIAB
12de0 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d  LE: variable num
12df0 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31  ber (always >= 1
12e00 29 2e 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  ). */.  i16 iAgg
12e10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
12e20 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
12e30 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
12e40 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
12e50 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
12e60 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
12e70 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
12e80 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
12e90 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
12ea0 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
12eb0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
12ec0 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
12ed0 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
12f00 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
12f10 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
12f20 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12f40 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
12f50 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
12f60 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
12f70 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
12f80 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
12f90 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
12fa0 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
12fb0 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
12fc0 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
12fd0 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
12fe0 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a  essions. */.};..
12ff0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
13000 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e  ing are the mean
13010 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20  ings of bits in 
13020 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66  the Expr.flags f
13030 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
13040 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78   EP_FromJoin  0x
13050 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e  000001 /* Origin
13060 61 74 65 64 20 69 6e 20 4f 4e 20 6f 72 20 55 53  ated in ON or US
13070 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ING clause of a 
13080 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
13090 45 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30  EP_Agg       0x0
130a0 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e  00002 /* Contain
130b0 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67  s one or more ag
130c0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
130d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
130e0 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30  Resolved  0x0000
130f0 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62  04 /* IDs have b
13100 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20  een resolved to 
13110 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69  COLUMNs */.#defi
13120 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20  ne EP_Error     
13130 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72  0x000008 /* Expr
13140 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20  ession contains 
13150 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f  one or more erro
13160 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rs */.#define EP
13170 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
13180 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
13190 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
131a0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
131b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
131c0 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
131d0 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
131e0 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
131f0 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
13200 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
13210 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
13220 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
13230 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
13240 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
13250 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
13260 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
13270 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
13280 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
13290 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
132a0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
132b0 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
132c0 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 61 72  TK_COLLATE opear
132d0 74 6f 72 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  tor */.      /* 
132e0 75 6e 75 73 65 64 20 20 20 20 20 20 30 78 30 30  unused      0x00
132f0 30 32 30 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20  0200 */.#define 
13300 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30  EP_IntValue  0x0
13310 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72  00400 /* Integer
13320 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64   value contained
13330 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a   in u.iValue */.
13340 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65  #define EP_xIsSe
13350 6c 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a  lect 0x000800 /*
13360 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61   x.pSelect is va
13370 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78  lid (otherwise x
13380 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64  .pList is) */.#d
13390 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20  efine EP_Skip   
133a0 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43     0x001000 /* C
133b0 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55  OLLATE, AS, or U
133c0 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69  NLIKELY */.#defi
133d0 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20  ne EP_Reduced   
133e0 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72  0x002000 /* Expr
133f0 20 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44   struct EXPR_RED
13400 55 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f  UCEDSIZE bytes o
13410 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
13420 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30  P_TokenOnly 0x00
13430 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  4000 /* Expr str
13440 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e  uct EXPR_TOKENON
13450 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  LYSIZE bytes onl
13460 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
13470 53 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30  Static    0x0080
13480 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65  00 /* Held in me
13490 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65  mory not obtaine
134a0 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20  d from malloc() 
134b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65  */.#define EP_Me
134c0 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30  mToken  0x010000
134d0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69   /* Need to sqli
134e0 74 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72  te3DbFree() Expr
134f0 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69  .zToken */.#defi
13500 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20  ne EP_NoReduce  
13510 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e  0x020000 /* Cann
13520 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ot EXPRDUP_REDUC
13530 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23  E this Expr */.#
13540 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65  define EP_Unlike
13550 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20  ly  0x040000 /* 
13560 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69  unlikely() or li
13570 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74  kelihood() funct
13580 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ion */.#define E
13590 50 5f 43 6f 6e 73 74 61 6e 74 20 20 30 78 30 38  P_Constant  0x08
135a0 30 30 30 30 20 2f 2a 20 4e 6f 64 65 20 69 73 20  0000 /* Node is 
135b0 61 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 0a 2f  a constant */../
135c0 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
135d0 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
135e0 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
135f0 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
13600 20 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20   .** Expr.flags 
13610 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
13620 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
13630 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
13640 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
13650 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
13660 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
13670 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
13680 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
13690 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
136a0 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
136b0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
136c0 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
136d0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
136e0 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
136f0 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
13700 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
13710 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
13720 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
13730 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
13740 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
13750 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
13760 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
13770 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
13780 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
13790 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
137a0 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
137b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
137c0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
137d0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
137e0 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
137f0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
13800 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
13810 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
13820 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
13830 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
13840 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
13850 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
13860 6c 20 45 78 70 72 20 0a 2a 2a 20 73 74 72 75 63  l Expr .** struc
13870 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
13880 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
13890 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
138a0 6e 20 45 78 70 72 2e 66 6c 61 67 73 20 0a 2a 2a  n Expr.flags .**
138b0 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72   and an Expr str
138c0 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f  uct with the EP_
138d0 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73  TokenOnly flag s
138e0 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  et..*/.#define E
138f0 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20  XPR_FULLSIZE    
13900 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78         sizeof(Ex
13910 70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a  pr)           /*
13920 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64   Full size */.#d
13930 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43  efine EXPR_REDUC
13940 45 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66  EDSIZE        of
13950 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62  fsetof(Expr,iTab
13960 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66  le)  /* Common f
13970 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69  eatures */.#defi
13980 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ne EXPR_TOKENONL
13990 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65  YSIZE      offse
139a0 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20  tof(Expr,pLeft) 
139b0 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75    /* Fewer featu
139c0 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c  res */../*.** Fl
139d0 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68  ags passed to th
139e0 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
139f0 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65  () function. See
13a00 20 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d   the header comm
13a10 65 6e 74 20 0a 2a 2a 20 61 62 6f 76 65 20 73 71  ent .** above sq
13a20 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
13a30 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23  or details..*/.#
13a40 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52  define EXPRDUP_R
13a50 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30 78  EDUCE         0x
13a60 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65  0001  /* Used re
13a70 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20  duced-size Expr 
13a80 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  nodes */../*.** 
13a90 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
13aa0 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70  sions.  Each exp
13ab0 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69  ression may opti
13ac0 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a  onally have a.**
13ad0 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f   name.  An expr/
13ae0 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  name combination
13af0 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20   can be used in 
13b00 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75  several ways, su
13b10 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73  ch.** as the lis
13b20 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49 44  t of "expr AS ID
13b30 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69  " fields followi
13b40 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72  ng a "SELECT" or
13b50 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20   in the.** list 
13b60 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20 69  of "ID = expr" i
13b70 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54  tems in an UPDAT
13b80 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78  E.  A list of ex
13b90 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a  pressions can.**
13ba0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73   also be used as
13bb0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
13bc0 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20   a function, in 
13bd0 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 61  which case the a
13be0 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20  .zName.** field 
13bf0 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
13c00 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74 68  ** By default th
13c10 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65  e Expr.zSpan fie
13c20 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e  ld holds a human
13c30 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72 69  -readable descri
13c40 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ption of.** the 
13c50 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
13c60 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  is used in the g
13c70 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72  eneration of err
13c80 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a  or messages and.
13c90 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73  ** column labels
13ca0 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
13cb0 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74   Expr.zSpan is t
13cc0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78  ypically the tex
13cd0 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e  t of a.** column
13ce0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69   expression as i
13cf0 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53 45  t exists in a SE
13d00 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
13d10 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20   However, if.** 
13d20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20 66  the bSpanIsTab f
13d30 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
13d40 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f   zSpan is overlo
13d50 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65  aded to mean the
13d60 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20   name.** of the 
13d70 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e  result column in
13d80 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42   the form: DATAB
13d90 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e  ASE.TABLE.COLUMN
13da0 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a  .  This later.**
13db0 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f   form is used fo
13dc0 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f  r name resolutio
13dd0 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46 52  n with nested FR
13de0 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73  OM clauses..*/.s
13df0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b  truct ExprList {
13e00 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20  .  int nExpr;   
13e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13e20 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ber of expressio
13e30 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  ns on the list *
13e40 2f 0a 20 20 69 6e 74 20 69 45 43 75 72 73 6f 72  /.  int iECursor
13e50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 44  ;          /* VD
13e60 42 45 20 43 75 72 73 6f 72 20 61 73 73 6f 63 69  BE Cursor associ
13e70 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 45  ated with this E
13e80 78 70 72 4c 69 73 74 20 2a 2f 0a 20 20 73 74 72  xprList */.  str
13e90 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
13ea0 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
13eb0 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
13ec0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
13ed0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
13ee0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 69 73        /* The lis
13ef0 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
13f00 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
13f10 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
13f20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61  /* Token associa
13f30 74 65 64 20 77 69 74 68 20 74 68 69 73 20 65 78  ted with this ex
13f40 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
13f50 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20  char *zSpan;    
13f60 20 20 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69          /* Origi
13f70 6e 61 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20  nal text of the 
13f80 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
13f90 20 20 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20    u8 sortOrder; 
13fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66            /* 1 f
13fb0 6f 72 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72  or DESC or 0 for
13fc0 20 41 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69   ASC */.    unsi
13fd0 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20  gned done :1;   
13fe0 20 20 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f      /* A flag to
13ff0 20 69 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70   indicate when p
14000 72 6f 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e  rocessing is fin
14010 69 73 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73  ished */.    uns
14020 69 67 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62  igned bSpanIsTab
14030 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f   :1; /* zSpan ho
14040 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c  lds DB.TABLE.COL
14050 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  UMN */.    unsig
14060 6e 65 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b  ned reusable :1;
14070 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65     /* Constant e
14080 78 70 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75  xpression is reu
14090 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69  sable */.    uni
140a0 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63  on {.      struc
140b0 74 20 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20  t {.        u16 
140c0 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20  iOrderByCol;    
140d0 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42    /* For ORDER B
140e0 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  Y, column number
140f0 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a   in result set *
14100 2f 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 41  /.        u16 iA
14110 6c 69 61 73 3b 20 20 20 20 20 20 20 20 20 20 20  lias;           
14120 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61  /* Index into Pa
14130 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72  rse.aAlias[] for
14140 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20   zName */.      
14150 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  } x;.      int i
14160 43 6f 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20  ConstExprReg;   
14170 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69     /* Register i
14180 6e 20 77 68 69 63 68 20 45 78 70 72 20 76 61 6c  n which Expr val
14190 75 65 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a  ue is cached */.
141a0 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b      } u;.  } *a;
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77    /* Alloc a pow
141d0 65 72 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65  er of two greate
141e0 72 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45  r or equal to nE
141f0 78 70 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  xpr */.};../*.**
14200 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
14210 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
14220 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61  s used by the pa
14230 72 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62  rser to record b
14240 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65  oth.** the parse
14250 20 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70   tree for an exp
14260 72 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  ression and the 
14270 73 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65  span of input te
14280 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  xt for an.** exp
14290 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  ression..*/.stru
142a0 63 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20  ct ExprSpan {.  
142b0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
142c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70        /* The exp
142d0 72 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72  ression parse tr
142e0 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ee */.  const ch
142f0 61 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a  ar *zStart;   /*
14300 20 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72   First character
14310 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
14320 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
14330 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65  zEnd;     /* One
14340 20 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20   character past 
14350 74 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74  the end of input
14360 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   text */.};../*.
14370 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14380 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
14390 20 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70   can hold a simp
143a0 6c 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74  le list of ident
143b0 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20  ifiers,.** such 
143c0 61 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62  as the list "a,b
143d0 2c 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f  ,c" in the follo
143e0 77 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a  wing statements:
143f0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45  .**.**      INSE
14400 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
14410 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20   VALUES ...;.** 
14420 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
14430 58 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63  X idx ON t(a,b,c
14440 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  );.**      CREAT
14450 45 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42  E TRIGGER trig B
14460 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20  EFORE UPDATE ON 
14470 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a  t(a,b,c) ...;.**
14480 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61  .** The IdList.a
14490 2e 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73  .idx field is us
144a0 65 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69  ed when the IdLi
144b0 73 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  st represents th
144c0 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c  e list of.** col
144d0 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20  umn names after 
144e0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20  a table name in 
144f0 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d  an INSERT statem
14500 65 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61  ent.  In the sta
14510 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20  tement.**.**    
14520 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
14530 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20  ,b,c) ....**.** 
14540 49 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d  If "a" is the k-
14550 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62  th column of tab
14560 6c 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c  le "t", then IdL
14570 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e  ist.a[0].idx==k.
14580 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73  .*/.struct IdLis
14590 74 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c  t {.  struct IdL
145a0 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63  ist_item {.    c
145b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
145c0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
145d0 69 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20  identifier */.  
145e0 20 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20    int idx;      
145f0 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
14600 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b  some Table.aCol[
14610 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61  ] of a column na
14620 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d  med zName */.  }
14630 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20   *a;.  int nId; 
14640 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14650 72 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73  r of identifiers
14660 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
14670 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69  };../*.** The bi
14680 74 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64  tmask datatype d
14690 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20  efined below is 
146a0 75 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73  used for various
146b0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
146c0 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74  **.** Changing t
146d0 68 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69  his from a 64-bi
146e0 74 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79  t to a 32-bit ty
146f0 70 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75  pe limits the nu
14700 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65  mber of.** table
14710 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33  s in a join to 3
14720 32 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e  2 instead of 64.
14730 20 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65    But it also re
14740 64 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a  duces the size.*
14750 2a 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79  * of the library
14760 20 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e   by 738 bytes on
14770 20 69 78 38 36 2e 0a 2a 2f 0a 74 79 70 65 64 65   ix86..*/.typede
14780 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 0a  f u64 Bitmask;..
14790 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
147a0 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
147b0 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
147c0 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
147d0 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
147e0 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
147f0 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
14800 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
14810 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
14820 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
14830 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
14840 28 6e 29 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  (n))../*.** The 
14850 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14860 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
14870 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
14880 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
14890 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
148a0 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
148b0 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
148c0 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
148d0 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
148e0 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
148f0 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
14900 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
14910 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
14920 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
14930 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
14940 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
14950 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
14960 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
14970 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
14980 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
14990 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
149a0 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
149b0 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
149c0 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
149d0 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
149e0 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
149f0 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
14a00 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
14a10 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
14a20 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
14a30 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
14a40 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
14a50 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
14a60 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
14a70 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
14a80 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
14a90 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
14aa0 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
14ab0 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
14ac0 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
14ad0 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
14ae0 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
14af0 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
14b00 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
14b10 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
14b20 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
14b30 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
14b40 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
14b50 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
14b60 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
14b70 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
14b80 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
14b90 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
14ba0 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
14bb0 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
14bc0 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
14bd0 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
14be0 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
14bf0 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
14c00 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
14c10 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
14c20 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
14c30 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
14c40 20 7b 0a 20 20 75 38 20 6e 53 72 63 3b 20 20 20   {.  u8 nSrc;   
14c50 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14c60 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
14c70 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
14c80 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
14c90 38 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  8 nAlloc;      /
14ca0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
14cb0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
14cc0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
14cd0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
14ce0 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
14cf0 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
14d00 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
14d10 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
14d20 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
14d30 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
14d40 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
14d50 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
14d60 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
14d70 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
14d80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
14d90 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
14da0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
14db0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
14dc0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
14dd0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
14de0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
14df0 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
14e00 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
14e10 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
14e20 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
14e30 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
14e40 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
14e50 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
14e60 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
14e70 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
14e80 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
14e90 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
14ea0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
14eb0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
14ec0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
14ed0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
14ee0 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
14ef0 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
14f00 62 20 2a 2f 0a 20 20 20 20 75 38 20 6a 6f 69 6e  b */.    u8 join
14f10 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
14f20 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
14f30 65 6e 20 74 68 69 73 20 61 62 6c 65 20 61 6e 64  en this able and
14f40 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
14f50 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  .    unsigned no
14f60 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
14f70 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
14f80 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
14f90 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
14fa0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
14fb0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
14fc0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
14fd0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
14fe0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69  .    unsigned vi
14ff0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
15000 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
15010 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
15020 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69  /.    unsigned i
15030 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
15040 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
15050 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
15060 20 69 6e 20 57 49 54 48 20 2a 2f 0a 23 69 66 6e   in WITH */.#ifn
15070 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
15080 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
15090 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
150a0 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
150b0 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
150c0 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
150d0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
150e0 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
150f0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
15100 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
15110 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
15120 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
15130 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
15140 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
15150 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
15160 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
15170 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
15180 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
15190 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
151a0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
151b0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
151c0 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
151d0 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 63  is used */.    c
151e0 68 61 72 20 2a 7a 49 6e 64 65 78 3b 20 20 20 20  har *zIndex;    
151f0 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66   /* Identifier f
15200 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20  rom "INDEXED BY 
15210 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65  <zIndex>" clause
15220 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
15230 49 6e 64 65 78 3b 20 20 20 20 2f 2a 20 49 6e 64  Index;    /* Ind
15240 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
15250 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 49  responding to zI
15260 6e 64 65 78 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  ndex, if any */.
15270 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
15280 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
15290 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
152a0 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
152b0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
152c0 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
152d0 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
152e0 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
152f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
15300 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
15310 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
15320 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
15330 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
15340 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
15350 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
15360 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
15370 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
15380 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
15390 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
153a0 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
153b0 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
153c0 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
153d0 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
153e0 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
153f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
15400 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
15410 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
15420 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
15430 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
15440 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
15450 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
15460 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
15470 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
15480 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
15490 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
154a0 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
154b0 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
154c0 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
154d0 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
154e0 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
154f0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
15500 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
15510 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
15520 73 20 6d 65 6d 62 65 72 2e 0a 2a 2f 0a 23 64 65  s member..*/.#de
15530 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
15540 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
15550 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
15560 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
15570 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
15580 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
15590 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
155a0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
155b0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
155c0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
155d0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
155e0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
155f0 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
15600 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
15610 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
15620 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
15630 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
15640 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
15650 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
15660 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 30 38  TES_OK    0x0008
15670 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
15680 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
15690 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
156a0 20 57 48 45 52 45 5f 4f 4d 49 54 5f 4f 50 45 4e   WHERE_OMIT_OPEN
156b0 5f 43 4c 4f 53 45 20 20 30 78 30 30 31 30 20 2f  _CLOSE  0x0010 /
156c0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 73 20  * Table cursors 
156d0 61 72 65 20 61 6c 72 65 61 64 79 20 6f 70 65 6e  are already open
156e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
156f0 45 5f 46 4f 52 43 45 5f 54 41 42 4c 45 20 20 20  E_FORCE_TABLE   
15700 20 20 20 30 78 30 30 32 30 20 2f 2a 20 44 6f 20     0x0020 /* Do 
15710 6e 6f 74 20 75 73 65 20 61 6e 20 69 6e 64 65 78  not use an index
15720 2d 6f 6e 6c 79 20 73 65 61 72 63 68 20 2a 2f 0a  -only search */.
15730 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
15740 45 54 41 42 4c 45 5f 4f 4e 4c 59 20 20 20 20 30  ETABLE_ONLY    0
15750 78 30 30 34 30 20 2f 2a 20 4f 6e 6c 79 20 63 6f  x0040 /* Only co
15760 64 65 20 74 68 65 20 31 73 74 20 74 61 62 6c 65  de the 1st table
15770 20 69 6e 20 70 54 61 62 4c 69 73 74 20 2a 2f 0a   in pTabList */.
15780 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 41 4e  #define WHERE_AN
15790 44 5f 4f 4e 4c 59 20 20 20 20 20 20 20 20 20 30  D_ONLY         0
157a0 78 30 30 38 30 20 2f 2a 20 44 6f 6e 27 74 20 75  x0080 /* Don't u
157b0 73 65 20 69 6e 64 69 63 65 73 20 66 6f 72 20 4f  se indices for O
157c0 52 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69  R terms */.#defi
157d0 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
157e0 20 20 20 20 20 20 20 20 20 20 30 78 30 31 30 30            0x0100
157f0 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
15800 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
15810 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
15820 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
15830 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 70 4f      0x0200 /* pO
15840 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
15850 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
15860 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
15870 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
15880 54 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 41  T    0x0400 /* A
15890 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
158a0 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
158b0 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
158c0 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
158d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
158e0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
158f0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
15900 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
15910 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
15920 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
15930 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
15940 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
15950 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
15960 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
15970 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
15980 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
15990 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
159a0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
159b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
159c0 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
159d0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
159e0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
159f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
15a00 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
15a10 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
15a20 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
15a30 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
15a40 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
15a50 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
15a60 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
15a70 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
15a80 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
15a90 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
15aa0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
15ab0 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
15ac0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
15ad0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
15ae0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
15af0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
15b00 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
15b10 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
15b20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
15b30 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
15b40 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
15b50 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
15b60 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
15b70 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
15b80 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
15b90 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
15ba0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
15bb0 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
15bc0 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
15bd0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
15be0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
15bf0 20 69 6e 6e 65 72 2d 6d 6f 73 74 20 0a 2a 2a 20   inner-most .** 
15c00 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
15c10 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
15c20 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
15c30 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
15c40 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
15c50 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
15c60 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
15c70 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
15c80 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
15c90 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
15ca0 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
15cb0 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
15cc0 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
15cd0 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
15ce0 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
15cf0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
15d00 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
15d10 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
15d20 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
15d30 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
15d40 6d 65 6e 74 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 45  mented. .**.** E
15d50 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
15d60 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
15d70 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
15d80 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
15d90 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
15da0 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
15db0 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
15dc0 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
15dd0 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
15de0 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
15df0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
15e00 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
15e10 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
15e20 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
15e30 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
15e40 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
15e50 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
15e60 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
15e70 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
15e80 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
15e90 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
15ea0 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
15eb0 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
15ec0 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
15ed0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
15ee0 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
15ef0 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
15f00 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
15f10 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
15f20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
15f30 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
15f40 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
15f50 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
15f60 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
15f70 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
15f80 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
15f90 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
15fa0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
15fb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15fc0 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
15fd0 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
15fe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
15ff0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16000 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
16010 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
16020 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
16030 20 2a 2f 0a 20 20 75 38 20 6e 63 46 6c 61 67 73   */.  u8 ncFlags
16040 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  ;          /* Ze
16050 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
16060 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
16070 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
16080 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16090 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
160a0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
160b0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ld..*/.#define N
160c0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 31  C_AllowAgg  0x01
160d0 20 20 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65      /* Aggregate
160e0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
160f0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
16100 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67  define NC_HasAgg
16110 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
16120 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65  ne or more aggre
16130 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73  gate functions s
16140 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
16150 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 34  C_IsCheck   0x04
16160 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
16170 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
16180 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
16190 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
161a0 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
161b0 38 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  8    /* True if 
161c0 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
161d0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
161e0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
161f0 5f 50 61 72 74 49 64 78 20 20 20 30 78 31 30 20  _PartIdx   0x10 
16200 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
16210 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
16220 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
16230 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
16240 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
16250 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
16260 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
16270 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
16280 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
16290 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
162a0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
162b0 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
162c0 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
162d0 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
162e0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
162f0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
16300 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
16310 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
16320 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
16330 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
16340 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
16350 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
16360 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
16370 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
16380 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
16390 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
163a0 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
163b0 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
163c0 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
163d0 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
163e0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
163f0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
16400 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
16410 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
16420 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
16430 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
16440 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
16450 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
16460 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
16470 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
16480 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
16490 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
164a0 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
164b0 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
164c0 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
164d0 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
164e0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
164f0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
16500 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
16510 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
16520 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
16530 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
16540 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
16550 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
16560 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
16570 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
16580 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
16590 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
165a0 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
165b0 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
165c0 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
165d0 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
165e0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
165f0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
16600 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
16610 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
16620 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
16630 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
16640 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
16650 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
16660 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
16670 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
16680 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
16690 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
166a0 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
166b0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
166c0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
166d0 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
166e0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
166f0 45 58 43 45 50 54 20 2a 2f 0a 20 20 75 31 36 20  EXCEPT */.  u16 
16700 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
16710 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
16720 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
16730 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
16740 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
16750 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
16760 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
16770 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 69   counters */.  i
16780 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
16790 33 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  3];   /* OP_Open
167a0 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
167b0 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
167c0 6c 65 63 74 20 2a 2f 0a 20 20 75 36 34 20 6e 53  lect */.  u64 nS
167d0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 20 20  electRow;       
167e0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
167f0 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
16800 6f 77 73 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ows */.  SrcList
16810 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20   *pSrc;         
16820 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75  /* The FROM clau
16830 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  se */.  Expr *pW
16840 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f  here;          /
16850 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
16860 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
16870 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f   *pGroupBy;    /
16880 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63  * The GROUP BY c
16890 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
168a0 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20  *pHaving;       
168b0 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20    /* The HAVING 
168c0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
168d0 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
168e0 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20     /* The ORDER 
168f0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53  BY clause */.  S
16900 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20  elect *pPrior;  
16910 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73        /* Prior s
16920 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f  elect in a compo
16930 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65  und select state
16940 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ment */.  Select
16950 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
16960 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20   /* Next select 
16970 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61  to the left in a
16980 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 53   compound */.  S
16990 65 6c 65 63 74 20 2a 70 52 69 67 68 74 6d 6f 73  elect *pRightmos
169a0 74 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 2d 6d  t;    /* Right-m
169b0 6f 73 74 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ost select in a 
169c0 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
169d0 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 45  statement */.  E
169e0 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20  xpr *pLimit;    
169f0 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65        /* LIMIT e
16a00 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
16a10 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
16a20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73  */.  Expr *pOffs
16a30 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  et;         /* O
16a40 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e  FFSET expression
16a50 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
16a60 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68   used. */.  With
16a70 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
16a80 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73     /* WITH claus
16a90 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68  e attached to th
16aa0 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55  is select. Or NU
16ab0 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  LL. */.};../*.**
16ac0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
16ad0 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c  for Select.selFl
16ae0 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70  ags.  The "SF" p
16af0 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72  refix stands for
16b00 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67  .** "Select Flag
16b10 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  "..*/.#define SF
16b20 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
16b30 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 75 74 70   0x0001  /* Outp
16b40 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
16b50 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
16b60 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20   SF_Resolved    
16b70 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49      0x0002  /* I
16b80 64 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20  dentifiers have 
16b90 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f  been resolved */
16ba0 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72  .#define SF_Aggr
16bb0 65 67 61 74 65 20 20 20 20 20 20 20 30 78 30 30  egate       0x00
16bc0 30 34 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  04  /* Contains 
16bd0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16be0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
16bf0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
16c00 20 20 30 78 30 30 30 38 20 20 2f 2a 20 55 73 65    0x0008  /* Use
16c10 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
16c20 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
16c30 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
16c40 64 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  d        0x0010 
16c50 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
16c60 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
16c70 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
16c80 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
16c90 66 6f 20 20 20 20 20 30 78 30 30 32 30 20 20 2f  fo     0x0020  /
16ca0 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
16cb0 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
16cc0 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
16cd0 20 53 46 5f 55 73 65 53 6f 72 74 65 72 20 20 20   SF_UseSorter   
16ce0 20 20 20 20 30 78 30 30 34 30 20 20 2f 2a 20 53      0x0040  /* S
16cf0 6f 72 74 20 75 73 69 6e 67 20 61 20 73 6f 72 74  ort using a sort
16d00 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  er */.#define SF
16d10 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
16d20 20 30 78 30 30 38 30 20 20 2f 2a 20 53 79 6e 74   0x0080  /* Synt
16d30 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
16d40 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
16d50 65 66 69 6e 65 20 53 46 5f 4d 61 74 65 72 69 61  efine SF_Materia
16d60 6c 69 7a 65 20 20 20 20 20 30 78 30 31 30 30 20  lize     0x0100 
16d70 20 2f 2a 20 46 6f 72 63 65 20 6d 61 74 65 72 69   /* Force materi
16d80 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 76 69 65  alization of vie
16d90 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
16da0 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
16db0 20 30 78 30 32 30 30 20 20 2f 2a 20 50 61 72 74   0x0200  /* Part
16dc0 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
16dd0 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
16de0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61  */.#define SF_Ma
16df0 79 62 65 43 6f 6e 76 65 72 74 20 20 20 20 30 78  ybeConvert    0x
16e00 30 34 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f  0400  /* Need co
16e10 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
16e20 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
16e30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
16e40 63 75 72 73 69 76 65 20 20 20 20 20 20 20 30 78  cursive       0x
16e50 30 38 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  0800  /* The rec
16e60 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
16e70 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
16e80 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
16e90 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
16ea0 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
16eb0 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
16ec0 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
16ed0 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
16ee0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
16ef0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
16f00 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
16f10 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
16f20 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
16f30 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
16f40 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
16f50 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
16f60 72 61 72 79 20 69 6e 64 65 78 20 0a 2a 2a 20 20  rary index .**  
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
16f90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
16fa0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
16fb0 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
16fc0 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
16fd0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
16fe0 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
16ff0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
17000 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
17010 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
17020 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
17030 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
17040 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
17050 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
17060 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
17070 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
17080 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
17090 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
170a0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
170b0 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
170d0 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
170e0 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
170f0 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
17120 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
17130 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
17140 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
17150 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
17160 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
17170 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
17180 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
17190 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
171a0 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
171b0 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
171c0 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
171d0 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
171e0 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
171f0 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
17200 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
17210 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
17220 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
17230 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
17240 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
17250 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
17260 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
17270 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
172a0 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
172b0 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
172c0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
172d0 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
172e0 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
172f0 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
17300 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
17330 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
17340 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
17350 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
17360 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
17370 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
17380 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
17390 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
173c0 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
173d0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
173e0 50 61 72 6d 2e 20 0a 2a 2a 20 20 20 20 20 20 20  Parm. .**       
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
17400 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
17410 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
17420 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
17430 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17440 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
17450 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
17460 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
17470 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
17480 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
17490 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
174a0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
174b0 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
174c0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
174d0 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
174e0 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
174f0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
17500 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
17530 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
17540 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
17550 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
17560 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
17570 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
17580 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
17590 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
175b0 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
175c0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
175d0 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
175e0 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
175f0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
17600 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
17630 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
17640 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
17650 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
17660 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
17670 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
17680 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
17690 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
176a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
176b0 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
176c0 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
176d0 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
176e0 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
17710 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
17720 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
17730 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
17740 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
17750 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
17760 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
17790 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
177a0 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
177b0 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
177c0 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
177d0 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
177e0 62 65 20 6f 70 65 6e 2e 0a 2a 2a 0a 2a 2a 20 20  be open..**.**  
177f0 20 20 20 53 52 54 5f 44 69 73 74 54 61 62 6c 65     SRT_DistTable
17800 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
17810 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
17820 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
17830 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
17850 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
17860 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
17870 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
178a0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
178b0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
178c0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
178f0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
17900 20 54 61 62 6c 65 22 2e 0a 2a 2a 0a 2a 2a 20 20   Table"..**.**  
17910 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
17920 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
17930 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
17940 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
17950 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
17980 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
17990 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
179a0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
179d0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
179e0 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
179f0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
17a00 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
17a10 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
17a20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
17a30 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
17a40 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
17a50 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
17a60 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
17a90 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
17aa0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
17ab0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
17ac0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
17ad0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
17ae0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
17af0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
17b00 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
17b10 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
17b20 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
17b30 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
17b40 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
17b50 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
17b60 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
17b70 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
17b80 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
17b90 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
17ba0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
17bb0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
17bc0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
17bd0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
17be0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
17bf0 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
17c00 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
17c10 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
17c20 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 63 61  Dest)<=SRT_Disca
17c30 72 64 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  rd)..#define SRT
17c40 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 35 20  _Output       5 
17c50 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
17c60 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
17c70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
17c80 20 20 20 20 20 20 20 20 20 20 36 20 20 2f 2a 20            6  /* 
17c90 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
17ca0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
17cb0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
17cc0 20 20 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20            7  /* 
17cd0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
17ce0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
17cf0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
17d00 5f 45 70 68 65 6d 54 61 62 20 20 20 20 20 38 20  _EphemTab     8 
17d10 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
17d20 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
17d30 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
17d40 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
17d50 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 20 39 20  _Coroutine    9 
17d60 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
17d70 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
17d80 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
17d90 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
17da0 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
17db0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
17dc0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
17dd0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
17de0 54 5f 44 69 73 74 54 61 62 6c 65 20 20 20 31 31  T_DistTable   11
17df0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 54 61    /* Like SRT_Ta
17e00 62 6c 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ble, but unique 
17e10 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
17e20 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
17e30 65 20 20 20 20 20 20 20 31 32 20 20 2f 2a 20 53  e       12  /* S
17e40 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
17e50 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
17e60 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
17e70 20 20 20 31 33 20 20 2f 2a 20 4c 69 6b 65 20 53     13  /* Like S
17e80 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
17e90 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
17ea0 79 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  y */../*.** An i
17eb0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
17ec0 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
17ed0 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
17ee0 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
17ef0 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
17f00 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
17f10 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
17f20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
17f30 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
17f40 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
17f50 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
17f60 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
17f70 63 68 61 72 20 61 66 66 53 64 73 74 3b 20 20 20  char affSdst;   
17f80 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
17f90 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
17fa0 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
17fb0 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
17fc0 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
17fd0 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
17fe0 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
17ff0 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
18000 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
18010 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
18020 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
18030 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
18040 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
18050 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18060 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
18070 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
18080 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
18090 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
180a0 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
180b0 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
180c0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
180d0 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
180e0 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
180f0 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
18100 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
18110 4e 54 20 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  NT .** tables, t
18120 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
18130 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
18140 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
18150 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
18160 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
18170 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
18180 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
18190 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
181a0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
181b0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
181c0 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
181d0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
181e0 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
181f0 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
18200 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
18210 72 65 20 64 6f 77 6e 20 77 69 74 68 69 6e 20 74  re down within t
18220 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
18230 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
18240 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
18250 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
18260 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
18270 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
18280 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
18290 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
182a0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
182b0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
182c0 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
182d0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
182e0 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
182f0 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
18300 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
18310 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
18320 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
18330 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
18340 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
18350 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
18360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
18370 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
18380 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
18390 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
183a0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
183b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
183c0 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
183d0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
183e0 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
183f0 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
18400 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
18410 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
18420 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
18430 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
18440 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
18450 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
18460 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
18470 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
18480 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
18490 66 6f 72 20 65 61 63 68 20 0a 2a 2a 20 74 72 69  for each .** tri
184a0 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
184b0 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
184c0 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
184d0 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
184e0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
184f0 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
18500 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
18510 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
18520 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
18530 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
18540 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
18550 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
18560 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
18570 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
18580 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
18590 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
185a0 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
185b0 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
185c0 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
185d0 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
185e0 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
185f0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
18600 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
18610 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
18620 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
18630 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
18640 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
18650 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
18660 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
18670 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
18680 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
18690 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
186a0 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
186b0 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
186c0 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
186d0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
186e0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
186f0 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
18700 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
18710 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
18720 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
18730 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
18740 20 6f 66 20 49 4e 53 45 52 54 20 0a 2a 2a 20 73   of INSERT .** s
18750 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
18760 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
18770 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
18780 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
18790 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
187a0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
187b0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
187c0 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
187d0 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
187e0 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
187f0 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
18800 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
18810 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
18820 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
18830 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
18840 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
18850 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
18860 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
18870 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
18880 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
18890 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
188a0 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
188b0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
188c0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
188d0 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
188e0 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
188f0 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
18900 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
18910 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
18920 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
18930 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
18940 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
18950 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
18960 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
18970 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
18980 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
18990 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 73 71  >30.  typedef sq
189a0 6c 69 74 65 33 5f 75 69 6e 74 36 34 20 79 44 62  lite3_uint64 yDb
189b0 4d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79  Mask;.#else.  ty
189c0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
189d0 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 65 6e 64  nt yDbMask;.#end
189e0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
189f0 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
18a00 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
18a10 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
18a20 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
18a30 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
18a40 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
18a50 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
18a60 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
18a70 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
18a80 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
18a90 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
18aa0 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
18ab0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
18ac0 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
18ad0 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
18ae0 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
18af0 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
18b00 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
18b10 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
18b20 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
18b30 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
18b40 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
18b50 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
18b60 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
18b70 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
18b80 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
18b90 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
18ba0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
18bb0 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
18bc0 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
18bd0 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
18be0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
18bf0 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
18c00 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
18c10 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
18c20 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
18c30 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
18c40 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
18c50 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
18c60 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
18c70 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
18c80 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
18c90 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
18ca0 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
18cb0 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
18cc0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
18cd0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
18ce0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
18cf0 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
18d00 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
18d10 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
18d20 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
18d30 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
18d40 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
18d50 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
18d60 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
18d70 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
18d80 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
18d90 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
18da0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
18db0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
18dc0 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
18dd0 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
18de0 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
18df0 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
18e00 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
18e10 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
18e20 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
18e30 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
18e40 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
18e50 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
18e60 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
18e70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
18e80 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
18e90 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
18ea0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
18eb0 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
18ec0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18ed0 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
18ee0 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
18ef0 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 6e  pReg[] */.  u8 n
18f00 54 65 6d 70 49 6e 55 73 65 3b 20 20 20 20 20 20  TempInUse;      
18f10 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 54   /* Number of aT
18f20 65 6d 70 52 65 67 5b 5d 20 63 75 72 72 65 6e 74  empReg[] current
18f30 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
18f40 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
18f50 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
18f60 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
18f70 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
18f80 20 20 75 38 20 69 43 6f 6c 43 61 63 68 65 3b 20    u8 iColCache; 
18f90 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65         /* Next e
18fa0 6e 74 72 79 20 69 6e 20 61 43 6f 6c 43 61 63 68  ntry in aColCach
18fb0 65 5b 5d 20 74 6f 20 72 65 70 6c 61 63 65 20 2a  e[] to replace *
18fc0 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72  /.  u8 isMultiWr
18fd0 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65  ite;     /* True
18fe0 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61   if statement ma
18ff0 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20  y modify/insert 
19000 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
19010 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20  .  u8 mayAbort; 
19020 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
19030 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
19040 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
19050 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75  exception */.  u
19060 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20  8 hasCompound;  
19070 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69      /* Need to i
19080 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d  nvoke convertCom
19090 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
190a0 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 69 6e 74  query() */.  int
190b0 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
190c0 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
190d0 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
190e0 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 69  registers */.  i
190f0 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
19100 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
19110 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
19120 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
19130 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
19140 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
19150 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
19160 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
19170 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
19180 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
19190 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
191a0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
191b0 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
191c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
191d0 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
191e0 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
191f0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
19200 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19210 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
19220 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
19230 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20 20  */.  int nSet;  
19240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
19250 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65 64  ber of sets used
19260 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
19270 20 6e 4f 6e 63 65 3b 20 20 20 20 20 20 20 20 20   nOnce;         
19280 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 4f    /* Number of O
19290 50 5f 4f 6e 63 65 20 69 6e 73 74 72 75 63 74 69  P_Once instructi
192a0 6f 6e 73 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ons so far */.  
192b0 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20  int nOpAlloc;   
192c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
192d0 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65  f slots allocate
192e0 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
192f0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
19300 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
19310 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
19320 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
19330 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
19340 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
19350 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 69  he labels */.  i
19360 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20 20  nt iFixedOp;    
19370 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61 63      /* Never bac
19380 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69 46  k out opcodes iF
19390 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72 6c  ixedOp-1 or earl
193a0 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  ier */.  int ckB
193b0 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
193c0 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
193d0 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
193e0 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
193f0 2a 2f 0a 20 20 69 6e 74 20 69 50 61 72 74 49 64  */.  int iPartId
19400 78 54 61 62 3b 20 20 20 20 20 2f 2a 20 54 61 62  xTab;     /* Tab
19410 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
19420 20 74 6f 20 61 20 70 61 72 74 69 61 6c 20 69 6e   to a partial in
19430 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  dex */.  int iCa
19440 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  cheLevel;     /*
19450 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20   ColCache valid 
19460 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  when aColCache[]
19470 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c  .iLevel<=iCacheL
19480 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43  evel */.  int iC
19490 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f  acheCnt;       /
194a0 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74  * Counter used t
194b0 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43  o generate aColC
194c0 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65  ache[].lru value
194d0 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79 43  s */.  struct yC
194e0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
194f0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
19500 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
19510 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
19520 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
19530 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
19540 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
19550 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
19560 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
19570 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
19580 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
19590 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
195a0 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
195b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
195c0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
195d0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
195e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
195f0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
19600 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
19610 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
19620 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
19630 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
19640 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
19650 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
19660 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
19670 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
19680 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
19690 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
196a0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
196b0 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ry */.  ExprList
196c0 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20   *pConstExpr;/* 
196d0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
196e0 69 6f 6e 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73  ions */.  yDbMas
196f0 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f  k writeMask;   /
19700 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20  * Start a write 
19710 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74  transaction on t
19720 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a  hese databases *
19730 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b  /.  yDbMask cook
19740 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d  ieMask;  /* Bitm
19750 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65  ask of schema ve
19760 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73  rified databases
19770 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65   */.  int cookie
19780 47 6f 74 6f 3b 20 20 20 20 20 20 2f 2a 20 41 64  Goto;      /* Ad
19790 64 72 65 73 73 20 6f 66 20 4f 50 5f 47 6f 74 6f  dress of OP_Goto
197a0 20 74 6f 20 63 6f 6f 6b 69 65 20 76 65 72 69 66   to cookie verif
197b0 69 65 72 20 73 75 62 72 6f 75 74 69 6e 65 20 2a  ier subroutine *
197c0 2f 0a 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61  /.  int cookieVa
197d0 6c 75 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41  lue[SQLITE_MAX_A
197e0 54 54 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20  TTACHED+2];  /* 
197f0 56 61 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65  Values of cookie
19800 73 20 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20  s to verify */. 
19810 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20   int regRowid;  
19820 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
19830 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20  r holding rowid 
19840 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  of CREATE TABLE 
19850 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72  entry */.  int r
19860 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20  egRoot;         
19870 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
19880 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  ing root page nu
19890 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a  mber for new obj
198a0 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  ects */.  int nM
198b0 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f  axArg;         /
198c0 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65  * Max args passe
198d0 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69  d to user functi
198e0 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61  on by sub-progra
198f0 6d 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e  m */.  Token con
19900 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e  straintName;/* N
19910 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74  ame of the const
19920 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20  raint currently 
19930 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a  being parsed */.
19940 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
19950 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
19960 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63  .  int nTableLoc
19970 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  k;        /* Num
19980 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20  ber of locks in 
19990 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20  aTableLock */.  
199a0 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c  TableLock *aTabl
199b0 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72  eLock; /* Requir
199c0 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66  ed table locks f
199d0 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  or shared-cache 
199e0 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  mode */.#endif. 
199f0 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41   AutoincInfo *pA
19a00 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61  inc;  /* Informa
19a10 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49  tion about AUTOI
19a20 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72  NCREMENT counter
19a30 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 6e 66 6f 72  s */..  /* Infor
19a40 6d 61 74 69 6f 6e 20 75 73 65 64 20 77 68 69 6c  mation used whil
19a50 65 20 63 6f 64 69 6e 67 20 74 72 69 67 67 65 72  e coding trigger
19a60 20 70 72 6f 67 72 61 6d 73 2e 20 2a 2f 0a 20 20   programs. */.  
19a70 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
19a80 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
19a90 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
19aa0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
19ab0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
19ac0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
19ad0 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
19ae0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
19af0 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
19b00 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
19b10 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
19b20 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
19b30 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
19b40 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 53 6b   */.  int addrSk
19b50 69 70 50 4b 3b 20 20 20 20 20 20 2f 2a 20 41 64  ipPK;      /* Ad
19b60 64 72 65 73 73 20 6f 66 20 69 6e 73 74 72 75 63  dress of instruc
19b70 74 69 6f 6e 20 74 6f 20 73 6b 69 70 20 50 52 49  tion to skip PRI
19b80 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
19b90 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
19ba0 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
19bb0 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
19bc0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
19bd0 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
19be0 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
19bf0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
19c00 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
19c10 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
19c20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
19c30 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
19c40 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
19c50 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
19c60 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
19c70 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
19c80 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
19c90 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
19ca0 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
19cb0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
19cc0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
19cd0 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
19ce0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
19cf0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
19d00 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
19d10 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
19d20 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
19d30 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
19d40 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
19d50 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
19d60 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
19d70 68 20 72 65 63 75 72 73 69 6f 6e 20 2a 2f 0a 0a  h recursion */..
19d80 20 20 69 6e 74 20 6e 56 61 72 3b 20 20 20 20 20    int nVar;     
19d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
19da0 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
19db0 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
19dc0 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
19dd0 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20 20  .  int nzVar;   
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19df0 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c 61  Number of availa
19e00 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a 56  ble slots in azV
19e10 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50 6b  ar[] */.  u8 iPk
19e20 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
19e30 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45      /* ASC or DE
19e40 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  SC for INTEGER P
19e50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
19e60 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20  u8 explain;     
19e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
19e80 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e  e if the EXPLAIN
19e90 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f   flag is found o
19ea0 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23  n the query */.#
19eb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
19ec0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
19ed0 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61 62    u8 declareVtab
19ee0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
19ef0 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73 71  rue if inside sq
19f00 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
19f10 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ab() */.  int nV
19f20 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20  tabLock;        
19f30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19f40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
19f50 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69  to lock */.#endi
19f60 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b 20  f.  int nAlias; 
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19f80 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61 73   Number of alias
19f90 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f  ed result set co
19fa0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  lumns */.  int n
19fb0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
19fc0 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
19fd0 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f  on tree height o
19fe0 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65  f current sub-se
19ff0 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20  lect */.#ifndef 
1a000 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1a010 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63  AIN.  int iSelec
1a020 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  tId;            
1a030 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74  /* ID of current
1a040 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c   select for EXPL
1a050 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20  AIN output */.  
1a060 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49  int iNextSelectI
1a070 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
1a080 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65  t available sele
1a090 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49  ct ID for EXPLAI
1a0a0 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64  N output */.#end
1a0b0 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56 61  if.  char **azVa
1a0c0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
1a0d0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e 61  * Pointers to na
1a0e0 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65 72  mes of parameter
1a0f0 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65  s */.  Vdbe *pRe
1a100 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20  prepare;        
1a110 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70   /* VM being rep
1a120 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33  repared (sqlite3
1a130 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a  Reprepare()) */.
1a140 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
1a150 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ail;        /* A
1a160 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74  ll SQL text past
1a170 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f   the last semico
1a180 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20  lon parsed */.  
1a190 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65  Table *pNewTable
1a1a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74  ;         /* A t
1a1b0 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74  able being const
1a1c0 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45  ructed by CREATE
1a1d0 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67   TABLE */.  Trig
1a1e0 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72  ger *pNewTrigger
1a1f0 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72  ;     /* Trigger
1a200 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74   under construct
1a210 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49   by a CREATE TRI
1a220 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  GGER */.  const 
1a230 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
1a240 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70  xt; /* The 6th p
1a250 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e  arameter to db->
1a260 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20  xAuth callbacks 
1a270 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1a280 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 2f  Token;         /
1a290 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1a2a0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1a2b0 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 20  object name */. 
1a2c0 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1a2d0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  n;         /* Th
1a2e0 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72  e last token par
1a2f0 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  sed */.#ifndef S
1a300 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1a310 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20  ALTABLE.  Token 
1a320 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  sArg;           
1a330 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20      /* Complete 
1a340 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65  text of a module
1a350 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54   argument */.  T
1a360 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63  able **apVtabLoc
1a370 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  k;       /* Poin
1a380 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74  ter to virtual t
1a390 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f  ables needing lo
1a3a0 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  cking */.#endif.
1a3b0 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65    Table *pZombie
1a3c0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  Tab;        /* L
1a3d0 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a  ist of Table obj
1a3e0 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61  ects to delete a
1a3f0 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f  fter code gen */
1a400 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1a410 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20  TriggerPrg;  /* 
1a420 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63  Linked list of c
1a430 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f  oded triggers */
1a440 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a460 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61  Current WITH cla
1a470 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
1a480 20 20 75 38 20 62 46 72 65 65 57 69 74 68 3b 20    u8 bFreeWith; 
1a490 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
1a4a0 72 75 65 20 69 66 20 70 57 69 74 68 20 73 68 6f  rue if pWith sho
1a4b0 75 6c 64 20 62 65 20 66 72 65 65 64 20 77 69 74  uld be freed wit
1a4c0 68 20 70 61 72 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  h parser */.};..
1a4d0 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
1a4e0 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  e if currently i
1a4f0 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33  nside an sqlite3
1a500 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1a510 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  call..*/.#ifdef 
1a520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1a530 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69  UALTABLE.  #defi
1a540 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1a550 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65  AB 0.#else.  #de
1a560 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
1a570 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65  VTAB (pParse->de
1a580 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69  clareVtab).#endi
1a590 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
1a5a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1a5b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1a5c0 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20  can be declared 
1a5d0 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75  on a stack and u
1a5e0 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74  sed.** to save t
1a5f0 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  he Parse.zAuthCo
1a600 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74  ntext value so t
1a610 68 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65  hat it can be re
1a620 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f  stored later..*/
1a630 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74  .struct AuthCont
1a640 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68  ext {.  const ch
1a650 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74  ar *zAuthContext
1a660 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64  ;   /* Put saved
1a670 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1a680 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61  ext here */.  Pa
1a690 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1a6a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1a6b0 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1a6c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69   */.};../*.** Bi
1a6d0 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72  tfield flags for
1a6e0 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72   P5 value in var
1a6f0 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  ious opcodes..**
1a700 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
1a710 65 20 76 61 6c 75 65 73 20 66 6f 72 20 49 53 4e  e values for ISN
1a720 4f 4f 50 20 61 6e 64 20 4c 45 4e 47 54 48 41 52  OOP and LENGTHAR
1a730 47 20 61 72 65 20 74 68 65 20 73 61 6d 65 2e 20  G are the same. 
1a740 20 42 75 74 20 61 73 20 0a 2a 2a 20 74 68 6f 73   But as .** thos
1a750 65 20 62 69 74 73 20 61 72 65 20 6e 65 76 65 72  e bits are never
1a760 20 75 73 65 64 20 6f 6e 20 74 68 65 20 73 61 6d   used on the sam
1a770 65 20 6f 70 63 6f 64 65 2c 20 74 68 65 20 6f 76  e opcode, the ov
1a780 65 72 6c 61 70 20 69 73 20 68 61 72 6d 6c 65 73  erlap is harmles
1a790 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  s..*/.#define OP
1a7a0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
1a7b0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 53 65     0x01    /* Se
1a7c0 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1a7d0 6e 43 68 61 6e 67 65 20 2a 2f 0a 23 64 65 66 69  nChange */.#defi
1a7e0 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
1a7f0 57 49 44 20 20 20 20 20 30 78 30 32 20 20 20 20  WID     0x02    
1a800 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
1a810 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
1a820 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1a830 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
1a840 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
1a850 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
1a860 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
1a870 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
1a880 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
1a890 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
1a8a0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
1a8b0 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
1a8c0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
1a8d0 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
1a8e0 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
1a8f0 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
1a900 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
1a910 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
1a920 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 43      0x20    /* C
1a930 6c 65 61 72 20 70 73 65 75 64 6f 2d 74 61 62 6c  lear pseudo-tabl
1a940 65 20 63 61 63 68 65 20 69 6e 20 4f 50 5f 43 6f  e cache in OP_Co
1a950 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
1a960 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20  OPFLAG_ISNOOP   
1a970 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
1a980 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70  OP_Delete does p
1a990 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f  re-update-hook o
1a9a0 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
1a9b0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
1a9c0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
1a9d0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
1a9e0 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20  ed for length() 
1a9f0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
1aa00 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20  G_TYPEOFARG     
1aa10 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x80    /* OP_Co
1aa20 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
1aa30 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23  or typeof() */.#
1aa40 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55  define OPFLAG_BU
1aa50 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31  LKCSR       0x01
1aa60 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
1aa70 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75   used to open bu
1aa80 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65  lk cursor */.#de
1aa90 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
1aaa0 52 45 47 20 20 20 20 20 20 20 30 78 30 32 20 20  REG       0x02  
1aab0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
1aac0 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
1aad0 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
1aae0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
1aaf0 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
1ab00 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
1ab10 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
1ab20 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  tion */../*. * E
1ab30 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
1ab40 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
1ab50 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
1ab60 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
1ab70 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
1ab80 20 54 72 69 67 67 65 72 2e 20 0a 20 2a 0a 20 2a   Trigger. . *. *
1ab90 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73   Pointers to ins
1aba0 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
1abb0 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f   Trigger are sto
1abc0 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e  red in two ways.
1abd0 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74  . * 1. In the "t
1abe0 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61  rigHash" hash ta
1abf0 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65  ble (part of the
1ac00 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72   sqlite3* that r
1ac10 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 0a 20  epresents the . 
1ac20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
1ac30 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
1ac40 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
1ac50 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
1ac60 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
1ac70 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
1ac80 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
1ac90 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
1aca0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
1acb0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
1acc0 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
1acd0 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
1ace0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
1acf0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
1ad00 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
1ad10 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
1ad20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
1ad30 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1ad40 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
1ad50 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
1ad60 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
1ad70 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
1ad80 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1ad90 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
1ada0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
1adb0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
1adc0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
1add0 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
1ade0 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
1adf0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
1ae00 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
1ae10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
1ae20 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
1ae30 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
1ae50 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
1ae60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1ae70 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
1ae80 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
1ae90 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
1aea0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
1aeb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1aec0 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
1aed0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1aee0 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
1aef0 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
1af00 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
1af10 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
1af20 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
1af30 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
1af40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1af50 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
1af60 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
1af70 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
1af80 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
1af90 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
1afa0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
1afb0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
1afc0 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1aff0 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
1b000 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
1b010 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1b020 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
1b030 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
1b040 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
1b050 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
1b060 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
1b070 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
1b080 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
1b090 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
1b0a0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
1b0b0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
1b0c0 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
1b0d0 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
1b0e0 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
1b0f0 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
1b100 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
1b110 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
1b120 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
1b130 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
1b140 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
1b150 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
1b160 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
1b170 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
1b180 65 20 77 68 69 63 68 2e 20 0a 2a 2a 0a 2a 2a 20  e which. .**.** 
1b190 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
1b1a0 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
1b1b0 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
1b1c0 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
1b1d0 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
1b1e0 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
1b1f0 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
1b200 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
1b210 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
1b220 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
1b230 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
1b240 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
1b250 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
1b260 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
1b270 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
1b280 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
1b290 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
1b2a0 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
1b2b0 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
1b2c0 72 61 6d 2e 20 0a 20 2a 0a 20 2a 20 49 6e 73 74  ram. . *. * Inst
1b2d0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
1b2e0 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20  TriggerStep are 
1b2f0 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
1b300 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  ly linked list (
1b310 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20  linked. * using 
1b320 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62  the "pNext" memb
1b330 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62  er) referenced b
1b340 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74  y the "step_list
1b350 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
1b360 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
1b370 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
1b380 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
1b390 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
1b3a0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
1b3b0 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
1b3c0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
1b3d0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 20 0a 20 2a  -program.. * . *
1b3e0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
1b3f0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
1b400 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
1b410 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
1b420 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
1b430 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
1b440 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
1b450 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
1b460 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
1b470 6e 65 64 20 62 79 20 74 68 65 20 0a 20 2a 20 76  ned by the . * v
1b480 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
1b490 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
1b4a0 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
1b4b0 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
1b4c0 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
1b4d0 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
1b4e0 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
1b4f0 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
1b500 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
1b510 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
1b520 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
1b530 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1b540 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
1b550 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
1b560 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
1b570 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 74 61 72  ise NULL.. * tar
1b580 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65  get    -> A toke
1b590 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75  n holding the qu
1b5a0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
1b5b0 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74   table to insert
1b5c0 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c   into.. * pExprL
1b5d0 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69  ist -> If this i
1b5e0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
1b5f0 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20   ... VALUES ... 
1b600 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a  statement, then.
1b610 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
1b620 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75  this stores valu
1b630 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65  es to be inserte
1b640 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  d. Otherwise NUL
1b650 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20  L.. * pIdList   
1b660 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
1b670 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
1b680 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e   (<column-names>
1b690 29 20 56 41 4c 55 45 53 20 2e 2e 2e 20 0a 20 2a  ) VALUES ... . *
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1b6b0 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
1b6c0 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
1b6d0 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
1b6e0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1b6f0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
1b700 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
1b710 44 45 4c 45 54 45 29 0a 20 2a 20 74 61 72 67 65  DELETE). * targe
1b720 74 20 20 20 20 2d 3e 20 41 20 74 6f 6b 65 6e 20  t    -> A token 
1b730 68 6f 6c 64 69 6e 67 20 74 68 65 20 71 75 6f 74  holding the quot
1b740 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
1b750 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66  able to delete f
1b760 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  rom.. * pWhere  
1b770 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
1b780 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c  lause of the DEL
1b790 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ETE statement if
1b7a0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
1b7b0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
1b7c0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
1b7d0 4c 2e 0a 20 2a 20 0a 20 2a 20 28 6f 70 20 3d 3d  L.. * . * (op ==
1b7e0 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 74   TK_UPDATE). * t
1b7f0 61 72 67 65 74 20 20 20 20 2d 3e 20 41 20 74 6f  arget    -> A to
1b800 6b 65 6e 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  ken holding the 
1b810 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
1b820 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
1b830 74 65 20 72 6f 77 73 20 6f 66 2e 0a 20 2a 20 70  te rows of.. * p
1b840 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
1b850 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
1b860 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
1b870 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
1b880 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
1b890 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
1b8a0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
1b8b0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
1b8c0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
1b8d0 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
1b8e0 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
1b8f0 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
1b900 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
1b910 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
1b920 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
1b930 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
1b940 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
1b950 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 20 0a 20   argument.. * . 
1b960 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1b970 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b990 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
1b9a0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
1b9b0 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
1b9c0 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
1b9d0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
1b9e0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
1b9f0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
1ba00 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
1ba10 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
1ba20 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
1ba30 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
1ba40 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
1ba50 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 6d   /* SELECT statm
1ba60 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
1ba70 53 45 52 54 20 49 4e 54 4f 20 2e 2e 20 53 45 4c  SERT INTO .. SEL
1ba80 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 54 6f 6b  ECT ... */.  Tok
1ba90 65 6e 20 74 61 72 67 65 74 3b 20 20 20 20 20 20  en target;      
1baa0 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
1bab0 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
1bac0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
1bad0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1bae0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1baf0 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
1bb00 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
1bb10 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
1bb20 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
1bb30 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
1bb40 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49  r UPDATE. */.  I
1bb50 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20  dList *pIdList; 
1bb60 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61      /* Column na
1bb70 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a  mes for INSERT *
1bb80 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
1bb90 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1bba0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73   in the link-lis
1bbb0 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  t */.  TriggerSt
1bbc0 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c  ep *pLast;  /* L
1bbd0 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c  ast element in l
1bbe0 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20  ink-list. Valid 
1bbf0 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c  for 1st elem onl
1bc00 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
1bc10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1bc20 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1bc30 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64  information used
1bc40 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46 69   by the sqliteFi
1bc50 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  x....** routines
1bc60 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68   as they walk th
1bc70 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f 20  e parse tree to 
1bc80 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72 65  make database re
1bc90 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c  ferences.** expl
1bca0 69 63 69 74 2e 20 20 0a 2a 2f 0a 74 79 70 65 64  icit.  .*/.typed
1bcb0 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65  ef struct DbFixe
1bcc0 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63  r DbFixer;.struc
1bcd0 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61  t DbFixer {.  Pa
1bce0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1bcf0 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67    /* The parsing
1bd00 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72   context.  Error
1bd10 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65   messages writte
1bd20 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65  n here */.  Sche
1bd30 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
1bd40 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20  /* Fix items to 
1bd50 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
1bd60 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20   int bVarOnly;  
1bd70 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
1bd80 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72  r variable refer
1bd90 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  ences only */.  
1bda0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
1bdb0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
1bdc0 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65   all objects are
1bdd0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
1bde0 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
1bdf0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
1be00 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20  pe;  /* Type of 
1be10 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
1be20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
1be30 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e  essages */.  con
1be40 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b  st Token *pName;
1be50 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1be60 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
1be70 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
1be80 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ges */.};../*.**
1be90 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65   An objected use
1bea0 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20  d to accumulate 
1beb0 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74  the text of a st
1bec0 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a  ring where we.**
1bed0 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   do not necessar
1bee0 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67  ily know how big
1bef0 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c   the string will
1bf00 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a   be in the end..
1bf10 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63  */.struct StrAcc
1bf20 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  um {.  sqlite3 *
1bf30 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  db;         /* O
1bf40 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65  ptional database
1bf50 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20   for lookaside. 
1bf60 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a   Can be NULL */.
1bf70 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20 20    char *zBase;  
1bf80 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73 65         /* A base
1bf90 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
1bfa0 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a  t from malloc. *
1bfb0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b  /.  char *zText;
1bfc0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1bfd0 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64  string collected
1bfe0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1bff0 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20    nChar;        
1c000 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74    /* Length of t
1c010 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72  he string so far
1c020 20 2a 2f 0a 20 20 69 6e 74 20 20 6e 41 6c 6c 6f   */.  int  nAllo
1c030 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6d  c;         /* Am
1c040 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61 6c  ount of space al
1c050 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78 74  located in zText
1c060 20 2a 2f 0a 20 20 69 6e 74 20 20 6d 78 41 6c 6c   */.  int  mxAll
1c070 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  oc;        /* Ma
1c080 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 73 74  ximum allowed st
1c090 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20  ring length */. 
1c0a0 20 75 38 20 20 20 75 73 65 4d 61 6c 6c 6f 63 3b   u8   useMalloc;
1c0b0 20 20 20 20 20 20 2f 2a 20 30 3a 20 6e 6f 6e 65        /* 0: none
1c0c0 2c 20 20 31 3a 20 73 71 6c 69 74 65 33 44 62 4d  ,  1: sqlite3DbM
1c0d0 61 6c 6c 6f 63 2c 20 20 32 3a 20 73 71 6c 69 74  alloc,  2: sqlit
1c0e0 65 33 5f 6d 61 6c 6c 6f 63 20 2a 2f 0a 20 20 75  e3_malloc */.  u
1c0f0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
1c100 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
1c110 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
1c120 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 7d 3b 0a 23  M_TOOBIG */.};.#
1c130 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
1c140 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
1c150 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
1c160 47 20 20 32 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f  G  2../*.** A po
1c170 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
1c180 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
1c190 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69  to communicate i
1c1a0 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72  nformation.** fr
1c1b0 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61  om sqlite3Init a
1c1c0 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  nd OP_ParseSchem
1c1d0 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74  a into the sqlit
1c1e0 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a  e3InitCallback..
1c1f0 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
1c200 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  t {.  sqlite3 *d
1c210 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  b;        /* The
1c220 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20   database being 
1c230 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
1c240 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
1c250 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65  ;    /* Error me
1c260 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72  ssage stored her
1c270 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  e */.  int iDb; 
1c280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20             /* 0 
1c290 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73  for main databas
1c2a0 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20  e.  1 for TEMP, 
1c2b0 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64  2.. for ATTACHed
1c2c0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1c2d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
1c2e0 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20  ult code stored 
1c2f0 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61  here */.} InitDa
1c300 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63  ta;../*.** Struc
1c310 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ture containing 
1c320 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61  global configura
1c330 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68  tion data for th
1c340 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79  e SQLite library
1c350 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ..**.** This str
1c360 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74  ucture also cont
1c370 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20  ains some state 
1c380 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1c390 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f  struct Sqlite3Co
1c3a0 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65  nfig {.  int bMe
1c3b0 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20  mstat;          
1c3c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1c3d0 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ue to enable mem
1c3e0 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20  ory status */.  
1c3f0 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20  int bCoreMutex; 
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
1c420 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e  ble core mutexin
1c430 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c  g */.  int bFull
1c440 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
1c450 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
1c460 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20   to enable full 
1c470 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
1c480 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20  t bOpenUri;     
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72  /* True to inter
1c4b0 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61  pret filenames a
1c4c0 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20  s URIs */.  int 
1c4d0 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20  bUseCis;        
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1c4f0 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e   Use covering in
1c500 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73  dices for full-s
1c510 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  cans */.  int mx
1c520 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
1c530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1c540 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
1c550 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
1c560 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
1c570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1c580 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
1c590 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
1c5a0 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
1c5b0 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
1c5c0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1c5d0 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
1c5e0 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
1c5f0 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c610 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
1c620 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
1c630 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  /.  sqlite3_mem_
1c640 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20  methods m;      
1c650 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1c660 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  el memory alloca
1c670 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a  tion interface *
1c680 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1c690 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b  x_methods mutex;
1c6a0 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76        /* Low-lev
1c6b0 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61  el mutex interfa
1c6c0 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
1c6d0 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20  pcache_methods2 
1c6e0 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77  pcache2;  /* Low
1c6f0 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68  -level page-cach
1c700 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  e interface */. 
1c710 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20   void *pHeap;   
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c730 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61     /* Heap stora
1c740 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ge space */.  in
1c750 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20  t nHeap;        
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c770 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70  /* Size of pHeap
1c780 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  [] */.  int mnRe
1c790 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20  q, mxReq;       
1c7a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e            /* Min
1c7b0 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65   and max heap re
1c7c0 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a  quests sizes */.
1c7d0 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
1c7e0 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
1c7f0 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70      /* mmap() sp
1c800 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c  ace per open fil
1c810 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  e */.  sqlite3_i
1c820 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20  nt64 mxMmap;    
1c830 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
1c840 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a  mum value for sz
1c850 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  Mmap */.  void *
1c860 70 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  pScratch;       
1c870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
1c880 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f  cratch memory */
1c890 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74 63 68  .  int szScratch
1c8a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c8b0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1c8c0 65 61 63 68 20 73 63 72 61 74 63 68 20 62 75 66  each scratch buf
1c8d0 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63  fer */.  int nSc
1c8e0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
1c8f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1c900 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63 68 20  mber of scratch 
1c910 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
1c920 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20  d *pPage;       
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c940 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d  * Page cache mem
1c950 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50  ory */.  int szP
1c960 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
1c970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
1c980 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67 65 20  ze of each page 
1c990 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
1c9a0 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20  int nPage;      
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1c9d0 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20  ages in pPage[] 
1c9e0 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65  */.  int mxParse
1c9f0 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20  rStack;         
1ca00 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75         /* maximu
1ca10 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65 20 70  m depth of the p
1ca20 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20  arser stack */. 
1ca30 20 69 6e 74 20 73 68 61 72 65 64 43 61 63 68 65   int sharedCache
1ca40 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20  Enabled;        
1ca50 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68     /* true if sh
1ca60 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1ca70 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 2f 2a 20  enabled */.  /* 
1ca80 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
1ca90 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
1caa0 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
1cab0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
1cac0 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
1cad0 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
1cae0 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
1caf0 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
1cb20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
1cb30 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
1cb40 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
1cb70 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
1cb80 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
1cb90 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
1cba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1cbb0 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
1cbc0 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
1cbd0 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
1cbe0 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
1cc10 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
1cc20 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
1cc30 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
1cc40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1cc50 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
1cc60 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
1cc70 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  /.  sqlite3_mute
1cc80 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20  x *pInitMutex;  
1cc90 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75        /* Mutex u
1cca0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69  sed by sqlite3_i
1ccb0 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20  nitialize() */. 
1ccc0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
1ccd0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
1cce0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ccf0 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
1cd00 74 65 78 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tex */.  void (*
1cd10 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
1cd20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
1cd30 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
1cd40 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
1cd50 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
1cd80 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 20  t to xLog() */. 
1cd90 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
1cda0 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
1cdb0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
1cdc0 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
1cdd0 61 6c 6c 73 20 2a 2f 0a 23 69 66 64 65 66 20 53  alls */.#ifdef S
1cde0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
1cdf0 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
1ce00 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
1ce10 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
1ce20 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
1ce30 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
1ce40 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  f.};../*.** This
1ce50 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
1ce60 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
1ce70 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
1ce80 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
1ce90 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
1cea0 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
1ceb0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
1cec0 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
1ced0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
1cee0 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
1cef0 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
1cf00 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
1cf10 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1cf20 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
1cf30 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
1cf40 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
1cf50 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
1cf60 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
1cf70 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
1cf80 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
1cf90 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
1cfa0 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
1cfb0 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
1cfc0 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
1cfd0 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
1cfe0 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
1cff0 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
1d000 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
1d010 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
1d020 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
1d030 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
1d040 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
1d050 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
1d060 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
1d070 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1d080 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
1d090 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
1d0a0 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
1d0b0 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
1d0c0 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
1d0d0 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
1d0e0 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
1d0f0 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
1d100 7b 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  {.  int (*xExprC
1d110 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
1d120 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
1d130 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
1d140 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
1d150 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
1d160 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
1d170 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
1d180 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
1d190 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
1d1a0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
1d1b0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
1d1c0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
1d1d0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
1d1e0 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
1d1f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d210 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
1d220 20 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65    */.  int walke
1d230 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
1d260 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 6e  bqueries */.  un
1d270 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20  ion {           
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61          /* Extra
1d2a0 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61   data for callba
1d2b0 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f  ck */.    NameCo
1d2c0 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20  ntext *pNC;     
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63       /* Naming c
1d2f0 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e  ontext */.    in
1d300 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  t i;            
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
1d330 67 65 72 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  ger value */.   
1d340 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1d350 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
1d360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
1d370 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1d380 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
1d390 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d3b0 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
1d3c0 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
1d3d0 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
1d3e0 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
1d3f0 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
1d400 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
1d410 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
1d420 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
1d430 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
1d440 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
1d450 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
1d460 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
1d470 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
1d480 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
1d490 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
1d4a0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
1d4b0 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
1d4c0 65 6c 65 63 74 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20  elect*);../*.** 
1d4d0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1d4e0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
1d4f0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
1d500 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
1d510 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
1d520 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
1d530 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
1d540 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
1d550 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
1d560 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
1d570 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
1d580 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
1d590 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
1d5a0 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
1d5b0 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
1d5c0 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
1d5d0 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
1d5e0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1d5f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1d600 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
1d610 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
1d620 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
1d630 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
1d640 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
1d650 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
1d660 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
1d670 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
1d680 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d6a0 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
1d6b0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1d6c0 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
1d6d0 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
1d6e0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
1d6f0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
1d700 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
1d710 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d730 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
1d740 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
1d750 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
1d760 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1d780 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
1d790 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
1d7a0 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
1d7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
1d7c0 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
1d7d0 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
1d7e0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
1d7f0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
1d800 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1d810 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
1d820 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
1d830 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 72 72 3b  onst char *zErr;
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d850 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
1d860 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
1d870 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
1d880 5b 31 5d 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  [1];.};../*.** A
1d890 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e  ssuming zIn poin
1d8a0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
1d8b0 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20  byte of a UTF-8 
1d8c0 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64  character,.** ad
1d8d0 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69  vance zIn to poi
1d8e0 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  nt to the first 
1d8f0 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74  byte of the next
1d900 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
1d910 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
1d920 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49  ITE_SKIP_UTF8(zI
1d930 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  n) {            
1d940 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
1d950 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d  if( (*(zIn++))>=
1d960 30 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20  0xc0 ){         
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65       \.    while
1d990 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d  ( (*zIn & 0xc0)=
1d9a0 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20  =0x80 ){ zIn++; 
1d9b0 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a  }             \.
1d9c0 20 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20    }             
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9f0 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a         \.}../*.*
1da00 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42  * The SQLITE_*_B
1da10 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73  KPT macros are s
1da20 75 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74  ubstitutes for t
1da30 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77  he error codes w
1da40 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20  ith.** the same 
1da50 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74  name but without
1da60 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69   the _BKPT suffi
1da70 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73  x.  These macros
1da80 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69   invoke.** routi
1da90 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20  nes that report 
1daa0 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20  the line-number 
1dab0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72  on which the err
1dac0 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a  or originated.**
1dad0 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c   using sqlite3_l
1dae0 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69  og().  The routi
1daf0 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65  nes also provide
1db00 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c   a convenient pl
1db10 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20  ace.** to set a 
1db20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f  debugger breakpo
1db30 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  int..*/.int sqli
1db40 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
1db50 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
1db60 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74  3MisuseError(int
1db70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61  );.int sqlite3Ca
1db80 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29  ntopenError(int)
1db90 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
1dba0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71  _CORRUPT_BKPT sq
1dbb0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
1dbc0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
1dbd0 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53  ine SQLITE_MISUS
1dbe0 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69  E_BKPT sqlite3Mi
1dbf0 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  suseError(__LINE
1dc00 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
1dc10 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54  TE_CANTOPEN_BKPT
1dc20 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
1dc30 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
1dc40 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
1dc50 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
1dc60 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
1dc70 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
1dc80 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
1dc90 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
1dca0 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
1dcb0 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
1dcc0 6c 73 6f 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 53  lso all.** the S
1dcd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
1dce0 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65  4 macro to serve
1dcf0 20 61 73 20 61 6e 20 61 6c 69 73 73 65 20 66 6f   as an alisse fo
1dd00 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
1dd10 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
1dd20 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1dd30 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
1dd40 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
1dd50 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
1dd60 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
1dd70 46 54 53 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS3.#endif../*.
1dd80 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
1dd90 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
1dda0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
1ddb0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
1ddc0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
1ddd0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
1dde0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
1ddf0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
1de00 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1de10 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
1de20 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
1de30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1de40 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
1de50 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
1de60 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
1de70 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
1de80 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1de90 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
1dea0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
1deb0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
1dec0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
1ded0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
1dee0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
1def0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
1df00 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
1df10 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
1df20 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
1df30 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
1df40 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
1df50 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
1df60 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
1df70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1df80 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
1df90 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
1dfa0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
1dfb0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
1dfc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1dfd0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
1dfe0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1dff0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1e000 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
1e010 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
1e020 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1e030 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1e040 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
1e050 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1e060 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
1e070 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1e080 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1e090 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
1e0a0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
1e0b0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
1e0c0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
1e0d0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
1e0e0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1e0f0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
1e100 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
1e110 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
1e120 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
1e130 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
1e140 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
1e150 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
1e160 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 65  ed char)(x)]).#e
1e170 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
1e180 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
1e190 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
1e1a0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
1e1b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
1e1c0 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
1e1d0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
1e1e0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
1e1f0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
1e200 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
1e210 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
1e220 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
1e230 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
1e240 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
1e250 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
1e260 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
1e270 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
1e280 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
1e290 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1e2a0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
1e2b0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
1e2c0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
1e2d0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
1e2e0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
1e2f0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
1e300 78 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  x)).#endif../*.*
1e310 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
1e320 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
1e330 2f 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  /.#define sqlite
1e340 33 53 74 72 49 43 6d 70 20 73 71 6c 69 74 65 33  3StrICmp sqlite3
1e350 5f 73 74 72 69 63 6d 70 0a 69 6e 74 20 73 71 6c  _stricmp.int sql
1e360 69 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e  ite3Strlen30(con
1e370 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
1e380 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
1e390 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
1e3a0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
1e3b0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
1e3c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
1e3d0 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
1e3e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1e3f0 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  oc(int);.void *s
1e400 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
1e410 28 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (int);.void *sql
1e420 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
1e430 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
1e440 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
1e450 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
1e460 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
1e470 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1e480 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
1e490 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
1e4a0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
1e4b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
1e4c0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  r*, int);.void *
1e4d0 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
1e4e0 6f 69 64 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  oid*, int);.void
1e4f0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
1e500 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
1e510 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1e520 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
1e530 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
1e540 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 69 6e 74 29   *, void *, int)
1e550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
1e560 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
1e570 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
1e580 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
1e590 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
1e5a0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
1e5b0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
1e5c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
1e5d0 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
1e5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
1e5f0 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
1e600 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
1e610 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
1e620 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
1e630 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
1e640 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
1e650 61 75 6c 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ault(void);.void
1e660 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
1e670 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
1e680 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
1e690 2a 29 28 76 6f 69 64 29 29 3b 0a 69 6e 74 20 73  *)(void));.int s
1e6a0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
1e6b0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
1e6c0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
1e6d0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
1e6e0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
1e6f0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
1e700 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
1e710 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
1e720 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
1e730 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
1e740 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
1e750 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
1e760 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
1e770 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
1e780 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
1e790 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
1e7a0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
1e7b0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
1e7c0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
1e7d0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
1e7e0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
1e7f0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
1e800 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
1e810 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
1e820 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
1e830 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
1e840 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
1e850 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
1e860 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
1e870 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
1e880 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
1e890 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
1e8a0 44 2c 50 29 20 20 20 20 20 20 20 0a 23 65 6c 73  D,P)       .#els
1e8b0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
1e8c0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
1e8d0 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
1e8e0 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
1e8f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
1e900 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
1e910 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
1e920 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
1e930 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
1e940 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
1e950 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1e960 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  D,P).#endif..#if
1e970 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
1e980 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20  E_MEMSYS3.const 
1e990 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
1e9a0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
1e9b0 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b  etMemsys3(void);
1e9c0 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
1e9d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
1e9e0 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74  SYS5.const sqlit
1e9f0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a  e3_mem_methods *
1ea00 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d  sqlite3MemGetMem
1ea10 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 65 6e 64  sys5(void);.#end
1ea20 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  if...#ifndef SQL
1ea30 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20  ITE_MUTEX_OMIT. 
1ea40 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
1ea50 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
1ea60 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65  lite3DefaultMute
1ea70 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
1ea80 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
1ea90 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e   const *sqlite3N
1eaa0 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  oopMutex(void);.
1eab0 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
1eac0 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c  *sqlite3MutexAll
1ead0 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  oc(int);.  int s
1eae0 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28  qlite3MutexInit(
1eaf0 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c  void);.  int sql
1eb00 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69  ite3MutexEnd(voi
1eb10 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  d);.#endif..int 
1eb20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
1eb30 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
1eb40 6c 69 74 65 33 53 74 61 74 75 73 41 64 64 28 69  lite3StatusAdd(i
1eb50 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
1eb60 71 6c 69 74 65 33 53 74 61 74 75 73 53 65 74 28  qlite3StatusSet(
1eb70 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 6e  int, int);..#ifn
1eb80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1eb90 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
1eba0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
1ebb0 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
1ebc0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
1ebd0 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
1ebe0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
1ebf0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1ec00 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1ec10 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
1ec20 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
1ec30 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
1ec40 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
1ec50 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
1ec60 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
1ec70 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
1ec80 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
1ec90 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ecb0 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
1ecc0 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
1ecd0 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
1ece0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ecf0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
1ed00 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1ed10 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
1ed20 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
1ed30 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
1ed40 20 2a 2f 0a 7d 3b 0a 0a 23 64 65 66 69 6e 65 20   */.};..#define 
1ed50 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
1ed60 54 45 52 4e 41 4c 20 30 78 30 31 0a 23 64 65 66  TERNAL 0x01.#def
1ed70 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
1ed80 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 0a  F_SQLFUNC  0x02.
1ed90 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
1eda0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
1edb0 75 33 32 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  u32, const char*
1edc0 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64  , va_list);.void
1edd0 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28   sqlite3XPrintf(
1ede0 53 74 72 41 63 63 75 6d 2a 2c 20 75 33 32 2c 20  StrAccum*, u32, 
1edf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
1ee00 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
1ee10 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
1ee20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
1ee30 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
1ee40 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
1ee50 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
1ee60 76 61 5f 6c 69 73 74 29 3b 0a 63 68 61 72 20 2a  va_list);.char *
1ee70 73 71 6c 69 74 65 33 4d 41 70 70 65 6e 64 66 28  sqlite3MAppendf(
1ee80 73 71 6c 69 74 65 33 2a 2c 63 68 61 72 2a 2c 63  sqlite3*,char*,c
1ee90 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
1eea0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1eeb0 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  ITE_TEST) || def
1eec0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
1eed0 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  G).  void sqlite
1eee0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
1eef0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
1ef00 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
1ef10 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
1ef20 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
1ef30 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
1ef40 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
1ef50 66 0a 0a 2f 2a 20 4f 75 74 70 75 74 20 66 6f 72  f../* Output for
1ef60 6d 61 74 74 69 6e 67 20 66 6f 72 20 53 51 4c 49  matting for SQLI
1ef70 54 45 5f 54 45 53 54 43 54 52 4c 5f 45 58 50 4c  TE_TESTCTRL_EXPL
1ef80 41 49 4e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  AIN */.#if defin
1ef90 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
1efa0 5f 54 52 45 45 5f 45 58 50 4c 41 49 4e 29 0a 20  _TREE_EXPLAIN). 
1efb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1efc0 6c 61 69 6e 42 65 67 69 6e 28 56 64 62 65 2a 29  lainBegin(Vdbe*)
1efd0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
1efe0 45 78 70 6c 61 69 6e 50 72 69 6e 74 66 28 56 64  ExplainPrintf(Vd
1eff0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
1f000 2c 20 2e 2e 2e 29 3b 0a 20 20 76 6f 69 64 20 73  , ...);.  void s
1f010 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 4e 4c 28  qlite3ExplainNL(
1f020 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Vdbe*);.  void s
1f030 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50 75 73  qlite3ExplainPus
1f040 68 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69 64  h(Vdbe*);.  void
1f050 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e 50   sqlite3ExplainP
1f060 6f 70 28 56 64 62 65 2a 29 3b 0a 20 20 76 6f 69  op(Vdbe*);.  voi
1f070 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  d sqlite3Explain
1f080 46 69 6e 69 73 68 28 56 64 62 65 2a 29 3b 0a 20  Finish(Vdbe*);. 
1f090 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
1f0a0 6c 61 69 6e 53 65 6c 65 63 74 28 56 64 62 65 2a  lainSelect(Vdbe*
1f0b0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  , Select*);.  vo
1f0c0 69 64 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69  id sqlite3Explai
1f0d0 6e 45 78 70 72 28 56 64 62 65 2a 2c 20 45 78 70  nExpr(Vdbe*, Exp
1f0e0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
1f0f0 74 65 33 45 78 70 6c 61 69 6e 45 78 70 72 4c 69  te3ExplainExprLi
1f100 73 74 28 56 64 62 65 2a 2c 20 45 78 70 72 4c 69  st(Vdbe*, ExprLi
1f110 73 74 2a 29 3b 0a 20 20 63 6f 6e 73 74 20 63 68  st*);.  const ch
1f120 61 72 20 2a 73 71 6c 69 74 65 33 56 64 62 65 45  ar *sqlite3VdbeE
1f130 78 70 6c 61 6e 61 74 69 6f 6e 28 56 64 62 65 2a  xplanation(Vdbe*
1f140 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1f150 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1f160 42 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e  Begin(X).# defin
1f170 65 20 73 71 6c 69 74 65 33 45 78 70 6c 61 69 6e  e sqlite3Explain
1f180 53 65 6c 65 63 74 28 41 2c 42 29 0a 23 20 64 65  Select(A,B).# de
1f190 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 6c  fine sqlite3Expl
1f1a0 61 69 6e 45 78 70 72 28 41 2c 42 29 0a 23 20 64  ainExpr(A,B).# d
1f1b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
1f1c0 6c 61 69 6e 45 78 70 72 4c 69 73 74 28 41 2c 42  lainExprList(A,B
1f1d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
1f1e0 65 33 45 78 70 6c 61 69 6e 46 69 6e 69 73 68 28  e3ExplainFinish(
1f1f0 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  X).# define sqli
1f200 74 65 33 56 64 62 65 45 78 70 6c 61 6e 61 74 69  te3VdbeExplanati
1f210 6f 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  on(X) 0.#endif..
1f220 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74  .void sqlite3Set
1f230 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20  String(char **, 
1f240 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
1f250 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
1f260 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
1f270 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
1f280 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 69 6e 74  char*, ...);.int
1f290 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
1f2a0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
1f2b0 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
1f2c0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
1f2d0 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
1f2e0 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
1f2f0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
1f300 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
1f310 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
1f320 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
1f330 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
1f340 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
1f350 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
1f360 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
1f370 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
1f380 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
1f390 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
1f3a0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
1f3b0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
1f3c0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
1f3d0 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
1f3e0 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
1f3f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
1f400 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
1f410 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
1f420 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
1f430 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
1f440 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
1f450 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
1f460 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
1f470 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
1f480 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
1f490 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
1f4a0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
1f4b0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
1f4c0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 45  const Token*);.E
1f4d0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
1f4e0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
1f4f0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
1f500 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
1f510 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
1f520 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
1f530 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f540 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
1f550 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
1f560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
1f570 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
1f580 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
1f590 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
1f5a0 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
1f5b0 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
1f5c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1f5d0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
1f5e0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
1f5f0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
1f600 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
1f610 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
1f620 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70  ExprList*,ExprSp
1f630 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
1f640 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65  e3ExprListDelete
1f650 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c  (sqlite3*, ExprL
1f660 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
1f670 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
1f680 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
1f690 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
1f6a0 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
1f6b0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
1f6c0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
1f6d0 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
1f6e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
1f6f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
1f700 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
1f710 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
1f720 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
1f730 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1f740 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
1f750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
1f760 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
1f770 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
1f780 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 50  id sqlite3BeginP
1f790 61 72 73 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  arse(Parse*,int)
1f7a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
1f7b0 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
1f7c0 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 54  ges(sqlite3*);.T
1f7d0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
1f7e0 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
1f7f0 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
1f800 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
1f810 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
1f820 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
1f830 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
1f840 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
1f850 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
1f860 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
1f870 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
1f880 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
1f890 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
1f8a0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
1f8b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
1f8c0 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
1f8d0 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  se*,Token*);.voi
1f8e0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
1f8f0 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
1f900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
1f910 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
1f920 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
1f930 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
1f940 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
1f950 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
1f960 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
1f970 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
1f980 75 6d 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 54  umnType(Parse*,T
1f990 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
1f9a0 69 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61  ite3AddDefaultVa
1f9b0 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53  lue(Parse*,ExprS
1f9c0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
1f9d0 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70  te3AddCollateTyp
1f9e0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
1f9f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
1fa00 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ndTable(Parse*,T
1fa10 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c  oken*,Token*,u8,
1fa20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
1fa30 6c 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f  lite3ParseUri(co
1fa40 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
1fa50 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69  char*,unsigned i
1fa60 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  nt*,.           
1fa70 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
1fa80 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68  _vfs**,char**,ch
1fa90 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73  ar **);.Btree *s
1faa0 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74  qlite3DbNameToBt
1fab0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ree(sqlite3*,con
1fac0 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  st char*);.int s
1fad0 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65 28 50  qlite3CodeOnce(P
1fae0 61 72 73 65 20 2a 29 3b 0a 0a 42 69 74 76 65 63  arse *);..Bitvec
1faf0 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
1fb00 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
1fb10 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
1fb20 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
1fb30 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
1fb40 65 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75  ecSet(Bitvec*, u
1fb50 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
1fb60 33 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74  3BitvecClear(Bit
1fb70 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a  vec*, u32, void*
1fb80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
1fb90 69 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74  itvecDestroy(Bit
1fba0 76 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74  vec*);.u32 sqlit
1fbb0 65 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74  e3BitvecSize(Bit
1fbc0 76 65 63 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  vec*);.int sqlit
1fbd0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
1fbe0 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 0a  est(int,int*);..
1fbf0 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
1fc00 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
1fc10 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
1fc20 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
1fc30 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
1fc40 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
1fc50 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
1fc60 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
1fc70 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1fc80 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
1fc90 2a 2c 20 75 38 20 69 42 61 74 63 68 2c 20 69 36  *, u8 iBatch, i6
1fca0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
1fcb0 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
1fcc0 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
1fcd0 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
1fce0 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
1fcf0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 65  Token*,Token*,Se
1fd00 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
1fd10 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1fd20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
1fd30 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
1fd40 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1fd50 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
1fd60 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
1fd70 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
1fd80 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
1fd90 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
1fda0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
1fdb0 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 76 6f  ,B) 0.#endif..vo
1fdc0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
1fdd0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
1fde0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
1fdf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
1fe00 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
1fe10 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
1fe20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
1fe30 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
1fe40 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
1fe50 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1fe60 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
1fe70 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
1fe80 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
1fe90 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
1fea0 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
1feb0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
1fec0 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
1fed0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
1fee0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
1fef0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
1ff00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
1ff10 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
1ff20 58 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  X).#endif.int sq
1ff30 6c 69 74 65 33 43 6f 64 65 43 6f 72 6f 75 74 69  lite3CodeCorouti
1ff40 6e 65 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ne(Parse*, Selec
1ff50 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
1ff60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  ;.void sqlite3In
1ff70 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
1ff80 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
1ff90 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
1ffa0 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
1ffb0 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
1ffc0 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
1ffd0 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
1ffe0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
1fff0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
20000 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
20010 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
20020 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
20030 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
20040 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
20050 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
20060 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
20070 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
20080 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
20090 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
200a0 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
200b0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
200c0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
200d0 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
200e0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
200f0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
20100 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
20110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
20130 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
20140 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
20150 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
20160 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
20170 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
20180 54 6f 6b 65 6e 20 2a 29 3b 0a 69 6e 74 20 73 71  Token *);.int sq
20190 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f  lite3IndexedByLo
201a0 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74  okup(Parse *, st
201b0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
201c0 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  m *);.void sqlit
201d0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
201e0 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29  inType(SrcList*)
201f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
20200 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
20210 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
20220 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
20230 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73  e3IdListDelete(s
20240 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
20250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
20260 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  rcListDelete(sql
20270 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ite3*, SrcList*)
20280 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
20290 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a  AllocateIndexObj
202a0 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36  ect(sqlite3*,i16
202b0 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 49 6e  ,int,char**);.In
202c0 64 65 78 20 2a 73 71 6c 69 74 65 33 43 72 65 61  dex *sqlite3Crea
202d0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
202e0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
202f0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
20300 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20320 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
20330 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
20340 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50 61  ite3DropIndex(Pa
20350 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
20360 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
20370 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  3Select(Parse*, 
20380 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74 44  Select*, SelectD
20390 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  est*);.Select *s
203a0 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77 28  qlite3SelectNew(
203b0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
203c0 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
203d0 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20  ExprList*,.     
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203f0 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c 69      Expr*,ExprLi
20400 73 74 2a 2c 75 31 36 2c 45 78 70 72 2a 2c 45 78  st*,u16,Expr*,Ex
20410 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
20420 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28 73  e3SelectDelete(s
20430 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a  qlite3*, Select*
20440 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
20450 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50  3SrcListLookup(P
20460 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29  arse*, SrcList*)
20470 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52  ;.int sqlite3IsR
20480 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20  eadOnly(Parse*, 
20490 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Table*, int);.vo
204a0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  id sqlite3OpenTa
204b0 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 20  ble(Parse*, int 
204c0 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20 54  iCur, int iDb, T
204d0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66  able*, int);.#if
204e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
204f0 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44 45  ENABLE_UPDATE_DE
20500 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20 21  LETE_LIMIT) && !
20510 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
20520 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45 78  MIT_SUBQUERY).Ex
20530 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74  pr *sqlite3Limit
20540 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72 63  Where(Parse*,Src
20550 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
20560 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
20570 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  *,char*);.#endif
20580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
20590 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20  eteFrom(Parse*, 
205a0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29  SrcList*, Expr*)
205b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70  ;.void sqlite3Up
205c0 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72 63  date(Parse*, Src
205d0 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
205e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57  , Expr*, int);.W
205f0 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65  hereInfo *sqlite
20600 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72 73  3WhereBegin(Pars
20610 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
20620 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
20630 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a  List*,u16,int);.
20640 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65 72  void sqlite3Wher
20650 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  eEnd(WhereInfo*)
20660 3b 0a 75 36 34 20 73 71 6c 69 74 65 33 57 68 65  ;.u64 sqlite3Whe
20670 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
20680 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
20690 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
206a0 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
206b0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
206c0 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
206d0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
206e0 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
206f0 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
20700 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
20710 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
20720 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
20730 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
20740 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
20750 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  nfo*, int*);.int
20760 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
20770 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
20780 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
20790 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
207a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
207b0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
207c0 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
207d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
207e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
207f0 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
20800 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
20810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
20820 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
20830 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
20840 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
20850 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
20860 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
20870 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
20880 70 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  p(Parse*, int);.
20890 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
208a0 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
208b0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
208c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
208d0 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
208e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
208f0 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
20900 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
20910 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
20920 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
20930 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
20940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
20950 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
20960 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
20970 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
20980 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
20990 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
209a0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
209b0 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
209c0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
209d0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
209e0 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
209f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
20a00 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
20a10 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
20a20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
20a30 74 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64  t*, int, u8);.#d
20a40 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
20a50 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20  L_DUP      0x01 
20a60 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68   /* Deep, not sh
20a70 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a  allow copies */.
20a80 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
20a90 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30  CEL_FACTOR   0x0
20aa0 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74  2  /* Factor out
20ab0 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20   constant terms 
20ac0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
20ad0 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
20ae0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
20af0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
20b00 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
20b10 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
20b20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
20b30 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
20b40 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
20b50 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
20b60 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
20b70 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
20b80 65 2a 2c 69 6e 74 20 69 73 56 69 65 77 2c 63 6f  e*,int isView,co
20b90 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
20ba0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
20bb0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
20bc0 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 69 6e  leItem(Parse*,in
20bd0 74 20 69 73 56 69 65 77 2c 73 74 72 75 63 74 20  t isView,struct 
20be0 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
20bf0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
20c00 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
20c10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
20c20 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
20c30 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
20c40 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
20c50 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
20c60 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
20c70 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
20c80 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
20c90 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
20ca0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
20cb0 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 29 3b  3Vacuum(Parse*);
20cc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
20cd0 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
20ce0 6c 69 74 65 33 2a 29 3b 0a 63 68 61 72 20 2a 73  lite3*);.char *s
20cf0 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
20d00 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  ken(sqlite3*, To
20d10 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
20d20 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45 78  e3ExprCompare(Ex
20d30 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
20d40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
20d50 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
20d60 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
20d70 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
20d80 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
20d90 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  xpr(Expr*, Expr*
20da0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
20db0 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
20dc0 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
20dd0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
20de0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
20df0 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
20e00 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
20e10 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
20e20 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
20e30 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
20e40 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
20e50 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
20e60 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
20e70 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
20e80 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
20e90 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
20ea0 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64  tate(void);.void
20eb0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
20ec0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
20ed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
20ee0 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
20ef0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
20f00 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
20f10 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
20f20 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
20f30 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
20f40 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
20f50 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
20f60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
20f70 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
20f80 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
20f90 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
20fa0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
20fb0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
20fc0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
20fd0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
20fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
20ff0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
21000 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
21010 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
21020 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
21030 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
21040 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
21050 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
21060 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
21070 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
21080 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
21090 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
210a0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 29 3b 0a  unction(Expr*);.
210b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
210c0 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
210d0 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
210e0 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
210f0 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 76 6f  const Expr*);.vo
21100 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
21110 64 65 49 73 4e 75 6c 6c 4a 75 6d 70 28 56 64 62  deIsNullJump(Vdb
21120 65 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  e*, const Expr*,
21130 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
21140 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
21150 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
21160 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
21170 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
21180 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
21190 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
211a0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
211b0 65 74 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ete(Parse*,Table
211c0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
211d0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
211e0 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
211f0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
21200 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
21210 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
21220 74 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  t, int*);.int sq
21230 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
21240 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
21250 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
21260 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
21270 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
21280 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
21290 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
212a0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
212b0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
212f0 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
21300 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
21310 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
21320 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
21330 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
21340 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
21350 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
21360 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
21370 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69  int, int, u8*, i
21380 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64  nt*, int*);.void
21390 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
213a0 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73  teOperation(Pars
213b0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
213c0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69  oid sqlite3Multi
213d0 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76  Write(Parse*);.v
213e0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62  oid sqlite3MayAb
213f0 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ort(Parse*);.voi
21400 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e  d sqlite3HaltCon
21410 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
21420 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c  int, int, char*,
21430 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73   i8, u8);.void s
21440 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73  qlite3UniqueCons
21450 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
21460 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  nt, Index*);.voi
21470 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f  d sqlite3RowidCo
21480 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
21490 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45   int, Table*);.E
214a0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
214b0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
214c0 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73  r*,int);.ExprLis
214d0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
214e0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  stDup(sqlite3*,E
214f0 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53  xprList*,int);.S
21500 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
21510 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  rcListDup(sqlite
21520 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29  3*,SrcList*,int)
21530 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
21540 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74  3IdListDup(sqlit
21550 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65  e3*,IdList*);.Se
21560 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
21570 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  ectDup(sqlite3*,
21580 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 76 6f  Select*,int);.vo
21590 69 64 20 73 71 6c 69 74 65 33 46 75 6e 63 44 65  id sqlite3FuncDe
215a0 66 49 6e 73 65 72 74 28 46 75 6e 63 44 65 66 48  fInsert(FuncDefH
215b0 61 73 68 2a 2c 20 46 75 6e 63 44 65 66 2a 29 3b  ash*, FuncDef*);
215c0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
215d0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
215e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
215f0 72 2a 2c 69 6e 74 2c 69 6e 74 2c 75 38 2c 75 38  r*,int,int,u8,u8
21600 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21610 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
21620 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
21630 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
21640 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46  egisterDateTimeF
21650 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
21660 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
21670 73 74 65 72 47 6c 6f 62 61 6c 46 75 6e 63 74 69  sterGlobalFuncti
21680 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73  ons(void);.int s
21690 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63  qlite3SafetyChec
216a0 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  kOk(sqlite3*);.i
216b0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
216c0 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71  CheckSickOrOk(sq
216d0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
216e0 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69  lite3ChangeCooki
216f0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  e(Parse*, int);.
21700 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
21710 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
21720 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
21730 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
21740 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74  .void sqlite3Mat
21750 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72  erializeView(Par
21760 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
21770 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  r*, int);.#endif
21780 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
21790 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
217a0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
217b0 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  nTrigger(Parse*,
217c0 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69   Token*,Token*,i
217d0 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53  nt,int,IdList*,S
217e0 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  rcList*,.       
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69      Expr*,int, i
21810 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
21820 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72  te3FinishTrigger
21830 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
21840 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  Step*, Token*);.
21850 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
21860 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  opTrigger(Parse*
21870 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
21880 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21890 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50  DropTriggerPtr(P
218a0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29  arse*, Trigger*)
218b0 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c  ;.  Trigger *sql
218c0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
218d0 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
218e0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
218f0 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a  *, int *pMask);.
21900 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
21910 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61  e3TriggerList(Pa
21920 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b  rse *, Table *);
21930 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
21940 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61  odeRowTrigger(Pa
21950 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  rse*, Trigger *,
21960 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
21970 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20   int, Table *,. 
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20             int, 
219a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
219b0 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
219c0 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61  TriggerDirect(Pa
219d0 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a  rse *, Trigger *
219e0 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
219f0 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
21a00 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67  d sqliteViewTrig
21a10 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62  gers(Parse*, Tab
21a20 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  le*, Expr*, int,
21a30 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76   ExprList*);.  v
21a40 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
21a50 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c  eTriggerStep(sql
21a60 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74  ite3*, TriggerSt
21a70 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ep*);.  TriggerS
21a80 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
21a90 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71  gerSelectStep(sq
21aa0 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b  lite3*,Select*);
21ab0 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
21ac0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e  sqlite3TriggerIn
21ad0 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33  sertStep(sqlite3
21ae0 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74  *,Token*, IdList
21af0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b10 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63             Selec
21b20 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65  t*,u8);.  Trigge
21b30 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
21b40 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28  iggerUpdateStep(
21b50 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
21b60 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
21b70 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  , u8);.  Trigger
21b80 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
21b90 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73  ggerDeleteStep(s
21ba0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
21bb0 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  Expr*);.  void s
21bc0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
21bd0 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  ger(sqlite3*, Tr
21be0 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20  igger*);.  void 
21bf0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
21c00 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
21c10 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
21c20 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73   char*);.  u32 s
21c30 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
21c40 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67  mask(Parse*,Trig
21c50 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ger*,ExprList*,i
21c60 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e  nt,int,Table*,in
21c70 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  t);.# define sql
21c80 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
21c90 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
21ca0 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70  evel ? (p)->pTop
21cb0 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 65 6c  level : (p)).#el
21cc0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
21cd0 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
21ce0 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
21cf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
21d00 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
21d10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
21d20 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
21d30 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
21d40 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
21d50 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
21d60 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
21d70 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
21d80 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
21d90 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
21da0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
21db0 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
21dc0 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
21dd0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
21de0 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
21df0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
21e00 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
21e10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
21e20 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
21e30 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
21e40 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
21e50 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
21e60 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
21e70 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
21e80 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
21e90 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
21ea0 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
21eb0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
21ec0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
21ed0 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
21ee0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
21ef0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
21f00 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
21f10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
21f20 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
21f30 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
21f40 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
21f50 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
21f60 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
21f70 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
21f80 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
21f90 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
21fa0 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
21fb0 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
21fc0 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
21fd0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
21fe0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
21ff0 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
22000 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
22010 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
22020 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
22030 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
22040 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
22050 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
22060 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
22070 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
22080 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
22090 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
220a0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
220b0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
220c0 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
220d0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
220e0 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
220f0 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
22100 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
22110 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
22120 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
22130 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
22140 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
22150 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
22160 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
22170 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
22180 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
22190 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
221a0 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
221b0 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
221c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
221d0 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
221e0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
221f0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
22200 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
22210 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
22220 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
22230 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
22240 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
22250 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
22260 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
22270 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
22280 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
22290 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
222a0 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
222b0 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
222c0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
222d0 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
222e0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
222f0 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
22300 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
22310 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e  , int nChar);.in
22320 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68 61  t sqlite3Utf8Cha
22330 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  rLen(const char 
22340 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79 74  *pData, int nByt
22350 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 55  e);.u32 sqlite3U
22360 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75 38  tf8Read(const u8
22370 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  **);.LogEst sqli
22380 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a  te3LogEst(u64);.
22390 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
223a0 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c  gEstAdd(LogEst,L
223b0 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66 20  ogEst);.#ifndef 
223c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
223d0 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20  UALTABLE.LogEst 
223e0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72 6f  sqlite3LogEstFro
223f0 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b  mDouble(double);
22400 0a 23 65 6e 64 69 66 0a 75 36 34 20 73 71 6c 69  .#endif.u64 sqli
22410 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
22420 6f 67 45 73 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  ogEst);../*.** R
22430 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64 20  outines to read 
22440 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61 62  and write variab
22450 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
22460 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64 20  rs.  These used 
22470 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65 64  to.** be defined
22480 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f   locally, but no
22490 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61 72  w we use the var
224a0 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e 20  int routines in 
224b0 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69  the util.c.** fi
224c0 6c 65 2e 20 20 43 6f 64 65 20 73 68 6f 75 6c 64  le.  Code should
224d0 20 75 73 65 20 74 68 65 20 4d 41 43 52 4f 20 66   use the MACRO f
224e0 6f 72 6d 73 20 62 65 6c 6f 77 2c 20 61 73 20 74  orms below, as t
224f0 68 65 20 56 61 72 69 6e 74 33 32 20 76 65 72 73  he Varint32 vers
22500 69 6f 6e 73 0a 2a 2a 20 61 72 65 20 63 6f 64 65  ions.** are code
22510 64 20 74 6f 20 61 73 73 75 6d 65 20 74 68 65 20  d to assume the 
22520 73 69 6e 67 6c 65 20 62 79 74 65 20 63 61 73 65  single byte case
22530 20 69 73 20 61 6c 72 65 61 64 79 20 68 61 6e 64   is already hand
22540 6c 65 64 20 28 77 68 69 63 68 20 0a 2a 2a 20 74  led (which .** t
22550 68 65 20 4d 41 43 52 4f 20 66 6f 72 6d 20 64 6f  he MACRO form do
22560 65 73 29 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  es)..*/.int sqli
22570 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
22580 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
22590 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  );.int sqlite3Pu
225a0 74 56 61 72 69 6e 74 33 32 28 75 6e 73 69 67 6e  tVarint32(unsign
225b0 65 64 20 63 68 61 72 2a 2c 20 75 33 32 29 3b 0a  ed char*, u32);.
225c0 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  u8 sqlite3GetVar
225d0 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  int(const unsign
225e0 65 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a  ed char *, u64 *
225f0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
22600 56 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75  Varint32(const u
22610 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
22620 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  u32 *);.int sqli
22630 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34  te3VarintLen(u64
22640 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   v);../*.** The 
22650 68 65 61 64 65 72 20 6f 66 20 61 20 72 65 63 6f  header of a reco
22660 72 64 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  rd consists of a
22670 20 73 65 71 75 65 6e 63 65 20 76 61 72 69 61 62   sequence variab
22680 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67 65  le-length intege
22690 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 69 6e 74  rs..** These int
226a0 65 67 65 72 73 20 61 72 65 20 61 6c 6d 6f 73 74  egers are almost
226b0 20 61 6c 77 61 79 73 20 73 6d 61 6c 6c 20 61 6e   always small an
226c0 64 20 61 72 65 20 65 6e 63 6f 64 65 64 20 61 73  d are encoded as
226d0 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 0a   a single byte..
226e0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
226f0 20 6d 61 63 72 6f 73 20 74 61 6b 65 20 61 64 76   macros take adv
22700 61 6e 74 61 67 65 20 74 68 69 73 20 66 61 63 74  antage this fact
22710 20 74 6f 20 70 72 6f 76 69 64 65 20 61 20 66 61   to provide a fa
22720 73 74 20 65 6e 63 6f 64 65 0a 2a 2a 20 61 6e 64  st encode.** and
22730 20 64 65 63 6f 64 65 20 6f 66 20 74 68 65 20 69   decode of the i
22740 6e 74 65 67 65 72 73 20 69 6e 20 61 20 72 65 63  ntegers in a rec
22750 6f 72 64 20 68 65 61 64 65 72 2e 20 20 49 74 20  ord header.  It 
22760 69 73 20 66 61 73 74 65 72 20 66 6f 72 20 74 68  is faster for th
22770 65 20 63 6f 6d 6d 6f 6e 0a 2a 2a 20 63 61 73 65  e common.** case
22780 20 77 68 65 72 65 20 74 68 65 20 69 6e 74 65 67   where the integ
22790 65 72 20 69 73 20 61 20 73 69 6e 67 6c 65 20 62  er is a single b
227a0 79 74 65 2e 20 20 49 74 20 69 73 20 61 20 6c 69  yte.  It is a li
227b0 74 74 6c 65 20 73 6c 6f 77 65 72 20 77 68 65 6e  ttle slower when
227c0 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20   the.** integer 
227d0 69 73 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 62  is two or more b
227e0 79 74 65 73 2e 20 20 42 75 74 20 6f 76 65 72 61  ytes.  But overa
227f0 6c 6c 20 69 74 20 69 73 20 66 61 73 74 65 72 2e  ll it is faster.
22800 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
22810 77 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 73  wing expressions
22820 20 61 72 65 20 65 71 75 69 76 61 6c 65 6e 74 3a   are equivalent:
22830 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d 20 73  .**.**     x = s
22840 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
22850 32 28 20 41 2c 20 26 42 20 29 3b 0a 2a 2a 20 20  2( A, &B );.**  
22860 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 50 75     x = sqlite3Pu
22870 74 56 61 72 69 6e 74 33 32 28 20 41 2c 20 42 20  tVarint32( A, B 
22880 29 3b 0a 2a 2a 0a 2a 2a 20 20 20 20 20 78 20 3d  );.**.**     x =
22890 20 67 65 74 56 61 72 69 6e 74 33 32 28 20 41 2c   getVarint32( A,
228a0 20 42 20 29 3b 0a 2a 2a 20 20 20 20 20 78 20 3d   B );.**     x =
228b0 20 70 75 74 56 61 72 69 6e 74 33 32 28 20 41 2c   putVarint32( A,
228c0 20 42 20 29 3b 0a 2a 2a 0a 2a 2f 0a 23 64 65 66   B );.**.*/.#def
228d0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
228e0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
228f0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
22900 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
22910 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
22920 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
22930 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
22940 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
22950 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
22960 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
22970 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
22980 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
22990 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 33 32  lite3PutVarint32
229a0 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
229b0 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
229c0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
229d0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
229e0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
229f0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
22a00 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
22a10 78 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62  xAffinityStr(Vdb
22a20 65 20 2a 2c 20 49 6e 64 65 78 20 2a 29 3b 0a 76  e *, Index *);.v
22a30 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
22a40 41 66 66 69 6e 69 74 79 53 74 72 28 56 64 62 65  AffinityStr(Vdbe
22a50 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 63 68   *, Table *);.ch
22a60 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
22a70 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
22a80 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
22a90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
22aa0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
22ab0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
22ac0 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
22ad0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
22ae0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
22af0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
22b00 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
22b10 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
22b20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
22b30 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
22b40 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
22b50 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 2a 73 71  *,...);.void *sq
22b60 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28 73  lite3HexToBlob(s
22b70 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
22b80 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a  har *z, int n);.
22b90 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49  u8 sqlite3HexToI
22ba0 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73  nt(int h);.int s
22bb0 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
22bc0 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  e(Parse *, Token
22bd0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
22be0 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66  en **);..#if def
22bf0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
22c00 29 20 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  ) .const char *s
22c10 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
22c20 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
22c30 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
22c40 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
22c50 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
22c60 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
22c70 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
22c80 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
22c90 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
22ca0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
22cb0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
22cc0 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
22cd0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
22ce0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
22cf0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
22d00 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
22d10 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
22d20 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
22d30 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
22d40 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
22d50 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
22d60 20 54 6f 6b 65 6e 2a 29 3b 0a 45 78 70 72 20 2a   Token*);.Expr *
22d70 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
22d80 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
22d90 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
22da0 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
22db0 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
22dc0 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
22dd0 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
22de0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
22df0 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
22e00 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
22e10 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
22e20 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
22e30 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
22e40 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
22e50 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
22e60 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
22e70 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
22e80 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
22e90 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
22ea0 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
22eb0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
22ec0 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
22ed0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
22ee0 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
22ef0 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
22f00 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
22f10 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
22f20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
22f30 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
22f40 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
22f50 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
22f60 6e 73 74 20 63 68 61 72 20 2a 7a 2c 69 6e 74 29  nst char *z,int)
22f70 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73  ;..const void *s
22f80 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28  qlite3ValueText(
22f90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
22fa0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
22fb0 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74  ValueBytes(sqlit
22fc0 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
22fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
22fe0 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f  eSetStr(sqlite3_
22ff0 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e  value*, int, con
23000 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 20 0a 20  st void *,u8, . 
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
23030 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
23040 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
23050 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
23060 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
23070 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
23080 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
23090 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
230a0 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
230b0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
230c0 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65  3Utf16to8(sqlite
230d0 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  3 *, const void*
230e0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
230f0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d  sqlite3ValueFrom
23100 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
23110 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20  Expr *, u8, u8, 
23120 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
23130 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
23140 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74  alueApplyAffinit
23150 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  y(sqlite3_value 
23160 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e  *, u8, u8);.#ifn
23170 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
23180 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63  AMATION.extern c
23190 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
231a0 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65  ar sqlite3Opcode
231b0 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65  Property[];.exte
231c0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
231d0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
231e0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
231f0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
23200 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
23210 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
23220 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
23230 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
23240 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
23250 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
23260 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
23270 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
23280 53 51 4c 49 54 45 5f 57 53 44 20 46 75 6e 63 44  SQLITE_WSD FuncD
23290 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 47 6c  efHash sqlite3Gl
232a0 6f 62 61 6c 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  obalFunctions;.#
232b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
232c0 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
232d0 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
232e0 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
232f0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
23300 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
23310 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
23320 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
23330 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
23340 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
23350 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
23360 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
23370 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
23380 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
23390 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
233a0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
233b0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
233c0 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
233d0 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
233e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
233f0 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
23400 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
23410 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
23420 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
23430 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
23440 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
23450 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
23460 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 69  rse *, Expr *, i
23470 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
23480 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70  qlite3SelectPrep
23490 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
234a0 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b  , NameContext*);
234b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63  .int sqlite3Matc
234c0 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20  hSpanName(const 
234d0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
234e0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
234f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69   const char*);.i
23500 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
23510 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43  eExprNames(NameC
23520 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
23530 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
23540 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
23550 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
23560 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
23570 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
23580 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
23590 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
235a0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
235b0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
235c0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
235d0 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
235e0 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
235f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
23600 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
23610 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
23620 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
23630 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
23640 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
23650 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
23660 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
23670 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
23680 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
23690 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
236a0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
236b0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
236c0 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
236d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
236e0 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
236f0 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
23700 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
23710 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
23720 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
23730 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
23740 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
23750 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
23760 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
23770 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
23780 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
23790 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
237a0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
237b0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
237c0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
237d0 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
237e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
237f0 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
23800 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
23810 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
23820 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
23830 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
23840 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
23850 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
23860 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23870 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
23880 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
23890 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
238a0 69 64 20 73 71 6c 69 74 65 33 4d 69 6e 69 6d 75  id sqlite3Minimu
238b0 6d 46 69 6c 65 46 6f 72 6d 61 74 28 50 61 72 73  mFileFormat(Pars
238c0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
238d0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d  oid sqlite3Schem
238e0 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a  aClear(void *);.
238f0 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53  Schema *sqlite3S
23900 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33  chemaGet(sqlite3
23910 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e   *, Btree *);.in
23920 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54  t sqlite3SchemaT
23930 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a  oIndex(sqlite3 *
23940 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b  db, Schema *);.K
23950 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
23960 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69  eyInfoAlloc(sqli
23970 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  te3*,int,int);.v
23980 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e  oid sqlite3KeyIn
23990 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a  foUnref(KeyInfo*
239a0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
239b0 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65  te3KeyInfoRef(Ke
239c0 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
239d0 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
239e0 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  OfIndex(Parse*, 
239f0 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20  Index*);.#ifdef 
23a00 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74  SQLITE_DEBUG.int
23a10 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49   sqlite3KeyInfoI
23a20 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e  sWriteable(KeyIn
23a30 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  fo*);.#endif.int
23a40 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75   sqlite3CreateFu
23a50 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  nc(sqlite3 *, co
23a60 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c  nst char *, int,
23a70 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 20 0a 20   int, void *, . 
23a80 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
23a90 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
23aa0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
23ab0 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
23ac0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
23ad0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
23ae0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
23af0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
23b00 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
23b10 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
23b20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
23b30 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
23b40 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
23b50 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
23b60 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
23b70 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
23b80 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
23b90 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
23ba0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
23bb0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
23bc0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
23bd0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
23be0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
23bf0 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
23c00 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
23c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
23c20 70 65 6e 64 53 70 61 63 65 28 53 74 72 41 63 63  pendSpace(StrAcc
23c30 75 6d 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 2a  um*,int);.char *
23c40 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46  sqlite3StrAccumF
23c50 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29  inish(StrAccum*)
23c60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
23c70 72 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41  rAccumReset(StrA
23c80 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ccum*);.void sql
23c90 69 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e  ite3SelectDestIn
23ca0 69 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69  it(SelectDest*,i
23cb0 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  nt,int);.Expr *s
23cc0 71 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75  qlite3CreateColu
23cd0 6d 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  mnExpr(sqlite3 *
23ce0 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74  , SrcList *, int
23cf0 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71  , int);..void sq
23d00 6c 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61  lite3BackupResta
23d10 72 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  rt(sqlite3_backu
23d20 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  p *);.void sqlit
23d30 65 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73  e3BackupUpdate(s
23d40 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c  qlite3_backup *,
23d50 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20   Pgno, const u8 
23d60 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  *);..#ifdef SQLI
23d70 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
23d80 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
23d90 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
23da0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
23db0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
23dc0 62 65 53 65 74 56 61 6c 75 65 28 50 61 72 73 65  beSetValue(Parse
23dd0 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
23de0 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
23df0 75 38 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 76 6f  u8,int,int*);.vo
23e00 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
23e10 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
23e20 64 52 65 63 6f 72 64 2a 29 3b 0a 23 65 6e 64 69  dRecord*);.#endi
23e30 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  f../*.** The int
23e40 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45  erface to the LE
23e50 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61  MON-generated pa
23e60 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71  rser.*/.void *sq
23e70 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
23e80 28 76 6f 69 64 2a 28 2a 29 28 73 69 7a 65 5f 74  (void*(*)(size_t
23e90 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
23ea0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
23eb0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
23ec0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
23ed0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
23ee0 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
23ef0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
23f00 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
23f10 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
23f20 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
23f30 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
23f40 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
23f50 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
23f60 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
23f70 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
23f80 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
23f90 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
23fa0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
23fb0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
23fc0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
23fd0 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
23fe0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23ff0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
24000 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
24010 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
24020 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
24030 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
24040 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
24050 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
24060 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
24070 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
24080 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
24090 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
240a0 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
240b0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
240c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
240d0 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
240e0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
240f0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
24100 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
24110 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
24120 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
24130 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
24140 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
24150 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
24160 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
24170 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
24180 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
24190 56 74 61 62 4c 6f 63 6b 28 58 29 20 0a 23 20 20  VtabLock(X) .#  
241a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
241b0 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
241c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
241d0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
241e0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
241f0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
24200 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
24210 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
24220 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
24230 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
24240 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
24250 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
24260 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
24270 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
24280 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
24290 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
242a0 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
242b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
242c0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
242d0 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
242e0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
242f0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
24300 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
24310 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
24320 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
24330 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
24340 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
24350 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
24360 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
24370 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
24380 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
24390 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
243a0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
243b0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
243c0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
243d0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
243e0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
243f0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
24400 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
24410 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
24420 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
24430 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
24440 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
24450 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
24460 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
24470 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  ==0).#endif.void
24480 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
24490 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
244a0 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
244b0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
244c0 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
244d0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
244e0 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
244f0 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
24500 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
24510 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
24520 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
24530 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
24540 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
24550 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
24560 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
24570 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
24580 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
24590 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
245a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
245b0 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
245c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
245d0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
245e0 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
245f0 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
24600 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
24610 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
24620 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
24630 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
24640 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
24650 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
24660 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
24670 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
24680 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
24690 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
246a0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
246b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
246c0 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
246d0 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
246e0 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
246f0 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
24700 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
24710 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
24720 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
24730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
24740 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
24750 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
24760 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
24770 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
24780 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
24790 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
247a0 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
247b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
247c0 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
247d0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
247e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
247f0 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
24800 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
24810 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
24820 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
24830 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
24840 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
24850 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
24860 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
24870 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
24880 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
24890 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
248a0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
248b0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
248c0 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
248d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
248e0 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
248f0 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
24900 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
24910 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24920 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
24930 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
24940 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
24950 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
24960 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
24970 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
24980 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
24990 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
249a0 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
249b0 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
249c0 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
249d0 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
249e0 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
249f0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
24a00 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
24a10 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
24a20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
24a30 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
24a40 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
24a50 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
24a60 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
24a70 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
24a80 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
24a90 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
24aa0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
24ab0 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
24ac0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
24ad0 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
24ae0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
24af0 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
24b00 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
24b10 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
24b20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
24b30 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
24b40 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
24b50 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
24b60 69 74 79 20 69 73 20 0a 2a 2a 20 70 72 6f 76 69  ity is .** provi
24b70 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
24b80 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
24b90 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
24ba0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
24bb0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
24bc0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
24bd0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
24be0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24bf0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
24c00 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
24c10 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
24c20 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
24c30 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
24c40 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
24c50 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
24c60 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
24c70 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
24c80 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
24c90 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
24ca0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
24cb0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
24cc0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
24cd0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
24ce0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
24cf0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
24d00 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
24d10 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
24d20 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
24d30 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
24d40 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
24d50 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
24d60 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
24d70 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
24d80 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
24d90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
24da0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
24db0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
24dc0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
24dd0 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
24de0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
24df0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
24e00 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
24e10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
24e20 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
24e30 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
24e40 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
24e50 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
24e60 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
24e70 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
24e80 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
24e90 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
24ea0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
24eb0 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
24ec0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
24ed0 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
24ee0 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
24ef0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
24f00 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
24f10 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
24f20 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
24f30 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
24f40 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
24f50 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
24f60 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24f70 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
24f80 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
24f90 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
24fa0 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
24fb0 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
24fc0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
24fd0 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
24fe0 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
24ff0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
25000 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49   SQLITE_OMIT_BUI
25010 4c 54 49 4e 5f 54 45 53 54 0a 2a 2a 20 69 73 20  LTIN_TEST.** is 
25020 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  not defined..*/.
25030 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25040 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
25050 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
25060 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
25070 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
25080 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
25090 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
250a0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
250b0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
250c0 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
250d0 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
250e0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
250f0 66 0a 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  f..#define IN_IN
25100 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20  DEX_ROWID       
25110 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 49 4e      1.#define IN
25120 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20  _INDEX_EPH      
25130 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
25140 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
25150 41 53 43 20 20 20 20 20 20 20 33 0a 23 64 65 66  ASC       3.#def
25160 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
25170 45 58 5f 44 45 53 43 20 20 20 20 20 20 34 0a 69  EX_DESC      4.i
25180 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  nt sqlite3FindIn
25190 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45  Index(Parse *, E
251a0 78 70 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 23  xpr *, int*);..#
251b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
251c0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
251d0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
251e0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
251f0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
25200 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
25210 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
25220 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a  ;.  int sqlite3J
25230 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74  ournalSize(sqlit
25240 65 33 5f 76 66 73 20 2a 29 3b 0a 20 20 69 6e 74  e3_vfs *);.  int
25250 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
25260 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
25270 6c 65 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  le *);.  int sql
25280 69 74 65 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74  ite3JournalExist
25290 73 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  s(sqlite3_file *
252a0 70 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  p);.#else.  #def
252b0 69 6e 65 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  ine sqlite3Journ
252c0 61 6c 53 69 7a 65 28 70 56 66 73 29 20 28 28 70  alSize(pVfs) ((p
252d0 56 66 73 29 2d 3e 73 7a 4f 73 46 69 6c 65 29 0a  Vfs)->szOsFile).
252e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
252f0 33 4a 6f 75 72 6e 61 6c 45 78 69 73 74 73 28 70  3JournalExists(p
25300 29 20 31 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  ) 1.#endif..void
25310 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
25320 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
25330 69 6c 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ile *);.int sqli
25340 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 53 69 7a  te3MemJournalSiz
25350 65 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  e(void);.int sql
25360 69 74 65 33 49 73 4d 65 6d 4a 6f 75 72 6e 61 6c  ite3IsMemJournal
25370 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
25380 3b 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  ;..#if SQLITE_MA
25390 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
253a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70   void sqlite3Exp
253b0 72 53 65 74 48 65 69 67 68 74 28 50 61 72 73 65  rSetHeight(Parse
253c0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
253d0 70 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  p);.  int sqlite
253e0 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
253f0 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69  t(Select *);.  i
25400 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  nt sqlite3ExprCh
25410 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a  eckHeight(Parse*
25420 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  , int);.#else.  
25430 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
25440 78 70 72 53 65 74 48 65 69 67 68 74 28 78 2c 79  xprSetHeight(x,y
25450 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
25460 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
25470 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
25480 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
25490 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
254a0 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
254b0 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
254c0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
254d0 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
254e0 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
254f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
25500 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
25510 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
25520 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
25530 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
25540 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25550 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
25560 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
25570 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
25580 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
25590 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
255a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
255b0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
255c0 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
255d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
255e0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
255f0 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
25600 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
25610 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
25620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25630 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
25640 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
25650 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
25660 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
25670 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
25680 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
25690 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
256a0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
256b0 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
256c0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
256d0 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
256e0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
256f0 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
25700 73 73 61 67 65 73 2e 20 0a 2a 2f 0a 23 69 66 64  ssages. .*/.#ifd
25710 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25720 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e  _IOTRACE.# defin
25730 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66  e IOTRACE(A)  if
25740 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  ( sqlite3IoTrace
25750 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61   ){ sqlite3IoTra
25760 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73  ce A; }.  void s
25770 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
25780 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c  eSql(Vdbe*);.SQL
25790 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20  ITE_EXTERN void 
257a0 28 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  (*sqlite3IoTrace
257b0 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
257c0 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
257d0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
257e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
257f0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
25800 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
25810 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
25820 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
25830 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
25840 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
25850 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
25860 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
25870 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
25880 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
25890 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
258a0 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
258b0 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
258c0 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
258d0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
258e0 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
258f0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
25900 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
25910 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
25920 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
25930 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
25940 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
25950 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
25960 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
25970 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
25980 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
25990 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
259a0 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
259b0 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
259c0 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
259d0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
259e0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
259f0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
25a00 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
25a10 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
25a20 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
25a30 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
25a40 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
25a50 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
25a60 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
25a70 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
25a80 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
25a90 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
25aa0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
25ab0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
25ac0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
25ad0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
25ae0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
25af0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
25b00 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
25b10 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
25b20 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
25b30 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
25b40 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
25b50 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
25b60 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
25b70 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
25b80 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
25b90 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
25ba0 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
25bb0 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
25bc0 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
25bd0 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
25be0 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
25bf0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
25c00 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
25c10 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
25c20 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
25c30 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
25c40 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
25c50 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
25c60 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
25c70 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
25c80 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
25c90 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
25ca0 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
25cb0 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
25cc0 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
25cd0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
25ce0 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
25cf0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
25d00 20 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74   .**.** All of t
25d10 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
25d20 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
25d30 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
25d40 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
25d50 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
25d60 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
25d70 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
25d80 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
25d90 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
25da0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
25db0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
25dc0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
25dd0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
25de0 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
25df0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25e00 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
25e10 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
25e20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
25e30 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
25e40 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
25e50 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25e60 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
25e70 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
25e80 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
25e90 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
25ea0 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
25eb0 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
25ec0 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
25ed0 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
25ee0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
25ef0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
25f00 45 20 20 30 78 30 32 20 20 2f 2a 20 4d 69 67 68  E  0x02  /* Migh
25f10 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
25f20 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  aside memory */.
25f30 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
25f40 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34 20  SCRATCH    0x04 
25f50 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f   /* Scratch allo
25f60 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
25f70 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48  ne MEMTYPE_PCACH
25f80 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50  E     0x08  /* P
25f90 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61  age cache alloca
25fa0 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
25fb0 20 4d 45 4d 54 59 50 45 5f 44 42 20 20 20 20 20   MEMTYPE_DB     
25fc0 20 20 20 20 30 78 31 30 20 20 2f 2a 20 55 73 65      0x10  /* Use
25fd0 73 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  s sqlite3DbMallo
25fe0 63 2c 20 6e 6f 74 20 73 71 6c 69 74 65 5f 6d 61  c, not sqlite_ma
25ff0 6c 6c 6f 63 20 2a 2f 0a 0a 23 65 6e 64 69 66 20  lloc */..#endif 
26000 2f 2a 20 5f 53 51 4c 49 54 45 49 4e 54 5f 48 5f  /* _SQLITEINT_H_
26010 20 2a 2f 0a                                       */.